const arr = [1,2,[3,4,[5,6]],7]
arr.flat(Infinity) //[1,2,3,4,5,6,7] Infinity展开任意深度的嵌套数组
const arr = [1,2,[3,4,[5,6]],7]
const eachFlat = (arr = [], depth = 1) => {
const result = [];
(function flat(arr, depth) {
arr.forEach((item) => {
if (Array.isArray(item) && depth > 0) {
flat(item, depth - 1)
} else {
result.push(item)
}
})
})(arr, depth)
return result;
}
eacheFlat(arr,Infinity)
const arr = [1,2,[3,4,[5,6]],7]
const flatten = (arr, deep = 1) => {
if (deep <= 0) return arr;
return arr.reduce((res, curr) => res.concat(Array.isArray(curr) ? flatten(curr, deep - 1) : curr), [])
}
flatten(arr,Infinity)
const arr = [1,2,[3,4,[5,6]],7]
function* flatten(array) {
for (const item of array) {
if (Array.isArray(item)) {
yield* flatten(item);
} else {
yield item;
}
}
}
[...flatten(arr)]
const arr = [1,2,[3,4,[5,6]],7]
function flatten(arr) {
const stack = [...arr];
const res = [];
while (stack.length) {
const next = stack.pop();
if (Array.isArray(next)) {
stack.push(...next);
} else {
res.push(next);
}
}
return res.reverse();
}
flatten(arr)
const arr = [1,2,[3,4,[5,6]],7]
function flatten(arr) {
while (arr.some(item=> Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
flatten(arr)