美文网首页前端记念册
前端知识日报--(deepFlatten数组扁平化)

前端知识日报--(deepFlatten数组扁平化)

作者: 拿着号码牌徘徊 | 来源:发表于2018-11-29 11:31 被阅读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
    }
    

    相关文章

      网友评论

        本文标题:前端知识日报--(deepFlatten数组扁平化)

        本文链接:https://www.haomeiwen.com/subject/uzkzqqtx.html