一.reduce常见用法 参考链接:www.jianshu.com/p/e375ba1cf…
reduce的常见用法有:
- 1.数组求和,求乘积
- 2.求数组每个相同元素的个数
- 3.数组去重
- 4.求对象的属性和
- 5.拍平数组(见下面)
二.flat的实现
flat的基本用法:
- 1.无参数时默认拉平一层
- 2.有参数时,flat(2)拉平两层
- 3.参数为infinity时,全部拉平
- 4.参数小于等于零时,返回原数组
- 5.如果数组中有空位,会跳过空位 参考链接:segmentfault.com/a/119000002…
注意主要使用方法4,使用reduce来实现flat 数组扁平化
1. 递归 + Array.isArray判断
let arr = [1,2,[3,4],[[5,6]]]
function flatten(arr) {
let res = []
arr.forEach((value, index) => {
if(Array.isArray(value)) {
res = res.concat(flatten(value))
} else {
res.push(value)
}
})
return res
}
console.log(flatten(arr))
2. 高阶函数 reduce 实现
function flatten(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur)
}, [])
}
console.log(flatten(arr))
3.Array.prototype.flat(Infinity)
let arr = [1,2,[3,4],[[5,6]]]
console.log(arr.flat(Infinity))
4.高阶函数 some 实现
some 用来判断数组中是否还有数组元素,只要还有一个数组元素,就会返回 true;展开字符每次只能展开数组的一层,比如...[1,[2, [3]]]转换成[1,2,[3]],所以需要循环用 some 判断是否已展开到最后一层。
function flatten(arr) {
while(arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr)
}
return arr
}
console.log(flatten(arr))