(Я знаю, что подобные вопросы задавались в прошлом, но я не могу найти удовлетворительный ответ ... извините!)

Привет всем,

Я использую цикл for внутри цикла for, что приводит к появлению новых массивов.

Каждый раз, когда запускается внутренний цикл, я хотел бы поместить полученный массив в предварительно созданный пустой массив. Я ожидаю массив массивов.

Когда я тестирую путем записи в консоли каждого из массивов, сгенерированных во внутреннем цикле, все ожидаемые массивы создаются ». Но, как ни странно, когда я пытаюсь .push () каждый на предварительно созданный пустой массив, я получаю массив, полный индексных чисел, а не массив массивов (???).

Если кому-то удалось следовать этому описанию, пожалуйста, помогите! Огромное спасибо!

const isColourful = num => {
  const arr = num.toString().split('');

  const blankArr = [];

  const arrayOfArraysMaker = arr => {
    for (let c = 0; c < arr.length; c++) {
      for (let i = 0; i < arr.length; i++) {
        if (i + c > 0) {
          x = i + c;
        } else {
          x = undefined;
        }

        const workingArr = blankArr.push(arr.slice(i, x));
        console.log(blankArr);
      }
    }
  };

  arrayOfArraysMaker(arr);

  return arr;
};

console.log(isColourful(2457));

Возвращает список чисел от 1 до 16, когда я ожидал массив следующих массивов:

[ '2', '4', '5', '7' ]
[]
[]
[]
[ '2' ]
[ '4' ]
[ '5' ]
[ '7' ]
[ '2', '4' ]
[ '4', '5' ]
[ '5', '7' ]
[ '7' ]
[ '2', '4', '5' ]
[ '4', '5', '7' ]
[ '5', '7' ]
[ '7' ]
1
desalwe 21 Дек 2019 в 03:08

1 ответ

Лучший ответ

Ваш код работает, но я думаю, что вижу, что вас смущает.

const workingArr = blankArr.push(arr.slice(i, x));

Эта строка не делает то, о чем вы думаете.

Метод массива push возвращает новую длину массива (документация здесь)

Если бы вы использовали возвращаемое значение из push, вы бы получали число, увеличивающееся на единицу каждый раз, когда в этом массиве вызывается push(), поскольку массив получает каждый раз на один элемент больше.

Вы не должны здесь использовать возвращаемое значение push(), так как оно изменяет исходный массив.

1
Alex Wayne 21 Дек 2019 в 00:20