一、什么是数组扁平化
[1, [2, 3], [4, [5, 6]]] → [1, 2, 3, 4, 5, 6]
二、如何实现数组扁平化
- 提供四种方法实现数组扁平化
- flat
- forEach
- reduce
- ...拓展运算符
1. flat(es6新增)
- 参数:无参数时,默认只展开一层,有参数时,参数是几就展开几层
let arr = [1, 2, 3, [4, 5, [6, 7]], 8, 9, 10]
arr.flat(3)
2. forEach
function flatten(arr) {
const result = [];
arr.forEach((i) => {
if (Array.isArray(i))
result.push(...flatten(i));
else
result.push(i);
})
return result;
}
3. reduce(es5)
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
( acc, cur ) => acc.concat(cur),[]
)
function flatten(param) {
return param.reduce((prev, curr) => {
return prev.concat(
Array.isArray(curr) ? flatten(curr) : curr
)
}, [])
}
let arr = [1, 2, [3, 4, [5, 6]], 7, 8, 9,[10]]
console.log(flatten(arr));
4. 拓展运算符
- 对数组和 Set 结构进行解构赋值时,会默认调用
Symbol.iterator
方法展开一层数组
- some方法循环数组中的每一个元素,有一个元素为true时返回值为true,否则为false(循环)
[].concat(...[1, 2, 3, [4, 5]]);
function flatten(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
console.log(flatten([1, 2, 3, [4, 5, [6]], 7, [8]]));
三、总结
- 数组扁平化实际是当出现多层数组结构时就利用递归思想将嵌套数组展开,直至只有一层数组结构,返回该结果