2 回答

TA贡献1864条经验 获得超6个赞
每次只扁平化一次, 对结果尾递归, 直到数组中没有数组
let time = 0
function flat(arr) {
if (arr.length === 0 || !Array.isArray(arr)) return;
let containsArray = false;
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
containsArray = true;
let before = arr.slice(0, i);
let after = arr.slice(i + 1);
arr = before.concat(arr[i]).concat(after)
break;
}
}
console.log(++time)
return containsArray ? flat(arr) : arr;
}
flat([1, 2, [3, 4, 5, [6], [7]], 8, [9], [10], [11, [12]]]
最后打印:8 执行了8次

TA贡献1828条经验 获得超3个赞
function flat(arr) {
var ret = []
var dirty = false
arr.forEach(item => {
if (Array.isArray(item)) {
dirty = true
ret.push(...item)
} else {
ret.push(item)
}
})
return dirty ? flat(ret) : ret
}
添加回答
举报