前端记念册

前端知识日报--(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
}
上一篇下一篇

猜你喜欢

热点阅读