var all = [];
function one(numbers) {
for (i=0; i<numbers.length; i++) {
if (numbers[i].length) {
one(numbers[i]);
} else {
all.push(numbers[i]);
}
}
return all;
}
var numbers = [1,[6,7],2,3,4,5];
console.log(one(numbers)); // [1, 6, 7, 3, 4, 5]
// нужно // [1, 6, 7, 2, 3, 4, 5]
почему после возвращения из рекурсивного вызова i=3 а не 2?
2
. Хотя должно быть 1
.i
является глобальной. А то, что вообще работает - потому что строгий режим не включался. Погуглите, что происходит при присваивании значения необъявленной переменной.if (numbers[i].length) {
function flat(arr) {
const result = [];
for (const n of arr) {
if (n instanceof Array) {
result.push(...flat(n));
} else {
result.push(n);
}
}
return result;
}
// или
const flat = arr =>
Array.prototype.concat.apply(
[],
arr.map(n => Array.isArray(n) ? flat(n) : n)
);