前端知识日报--(deepFlatten数组扁平化)
2018-11-29 本文已影响0人
拿着号码牌徘徊
image.png
前端端知识日报是本坑新开的专题,记录每天碰到的脑子里有点模糊的知识点。
实现数组扁平化的方法很多。
在实际的项目运用,是简单的一个方法:
/**
*
* @description 将多层的打印数组降为所有item行单维数组
* @param {Array} arr 数据数组
* @returns 所有item行数据数组
*/
deepFlatten (arr) {
return [].concat(...arr.map(v => {
return Array.isArray(v) ? deepFlatten(v) : v
}));
}
或者是这样,有些看官形容为降为打击,不过split会分裂空数组
function flatten(arr){
let str = arr.toString()
return str.split(',')
}
function flatten1(arr){
return (arr + '').split(',')
}
除此之外也可以Array.prototype[Symbol.iterator]
修改next迭代器对多维数组进行特殊迭代取值。
或者使用如下的生成器:
//使用flat生成器
function* flat(arr) {
for (let item of arr) {
if (Array.isArray(item))
yield* flat(item)
else
yield item
}
}
function flatten(arr) {
let result = []
for (let val of flat(arr)) {
result.push(val)
}
return result
}