1. flat
const arr = [1, 2, [3, [4, [5, [6, 7]]]]]
console.log(arr.flat(Infinity))
// [1, 2, 3, 4, 5, 6, 7]
使用数组内置方法flat,它接收一个参数是需要扁平化的层数,Infinity表示扁平化所有的层
2. 递归
const flatten = (arr) => {
const result = []
;(function flat(arr) {
arr.forEach(v => {
if (Array.isArray(v)) flat(v)
else result.push(v)
})
})(arr)
return result
}
console.log(flatten(arr))
// [1, 2, 3, 4, 5, 6, 7]
递归是我们最容易想到的一种方式
3. 递归Generator
const flatten = function* (arr) {
for (const item of arr) {
if (Array.isArray(item)) yield* flatten(item)
else yield item
}
}
console.log([...flatten(arr)])
// [1, 2, 3, 4, 5, 6, 7]
4. 队列
const flatten = (arr) => {
const task = [...arr]
const result = []
while (task.length) {
const first = task.shift()
if (Array.isArray(first)) {
task.push(...first)
} else {
result.push(first)
}
}
return result
}
console.log(flatten(arr))
// [1, 2, 3, 4, 5, 6, 7]
我们删除数组中的第一个元素,如果第一个不是数组就把它放到结果中,如果是就把它展开并添加到数组的末尾,如此循环直到数组被清空
1. flat
使用数组内置方法flat,它接收一个参数是需要扁平化的层数,
Infinity表示扁平化所有的层2. 递归
递归是我们最容易想到的一种方式
3. 递归Generator
4. 队列
我们删除数组中的第一个元素,如果第一个不是数组就把它放到结果中,如果是就把它展开并添加到数组的末尾,如此循环直到数组被清空