#javascript #arrays
#javascript #массивы
Вопрос:
Я пытаюсь сделать что-то подобное, но динамически:
switch (scope) {
case 1: array.push("something nice"); break;
case 2: array[array.length-1].push("something nice"); break;
case 3: array[array[array.length-1].length-1].push("something nice"); break;
case 4: ...you get the idea
}
Это означает, что если у меня есть такой массив:
[1,2,[5,3,9,[4]]]
и я ввожу переключатель, когда scope = 3, результат будет:
[1,2,[5,3,9,[4,» что-нибудь приятное»]]]
однако, если scope = 2, результат будет:
[1,2,[5,3,9,[4],» что-нибудь приятное»]]
Код, который я написал, работает для этого, но я хочу сделать это динамически (без переключателя), когда область действия может быть равна любому числу (поскольку при суммировании массив всегда будет иметь эту область действия заранее, без необходимости добавлять новую вложенность).
Ответ №1:
Вы могли бы выполнить рекурсию и нажать, если scope
это один.
(Лично я считаю, что определение области видимости на основе нуля было бы более естественным в смысле программирования.)
function push(array, scope, value) {
if (scope === 1) return array.push(value);
push(array[array.length - 1], scope - 1, value);
}
const array = [1, 2, [5, 3, 9, [4]]];
push(array, 3, 'something nice');
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }