前端日常开发常用功能系列之数组扁平

这是前端日常开发常用功能这个系列文章的第一篇,该系列是日常开发中一些常用的功能的再总结、再提炼,以防止遗忘,便于日后复习。该系列预计包含以下内容: 防抖、节流、去重、拷贝、最值、扁平、偏函数、柯里、惰性函数、递归、乱序、排序、相等、注入、上传、下载、截图。。。

数组扁平就是将多维数组转化为一维数组;

方法一,利用数组原型的toString方法,但是只能用于数组元素都是数值时

const arr = [1, 3, [1, 4], [2, [5, 65, [8, 9]]]];

const flattenArr = arr.toString().split(',');

// ["1", "3", "1", "4", "2", "5", "65", "8", "9"]

方法二,循环递归

const ar = [1, 3, [1, 4], ['a', [5, 65, ['b', 9]]]];

    const flatten = arr => {
        let newArr = [];
        for(let i = 0; i < arr.length; i++) {
            if(Array.isArray(arr[i])) {
                newArr = newArr.concat(flatten(arr[i]));
            } else {
                newArr.push(arr[i]);
            }
        }
        return newArr;
    };

flatten(ar); // [1, 3, 1, 4, "a", 5, 65, "b", 9]

方法三,使用es6展开符...

const ar = [1, 3, [1, 4], ['a', [5, 65, ['b', 9]]]];

    const flatten = arr => {
        while(arr.some(item => Array.isArray(item))) {
            arr = [].concat(...arr);
        }
        return arr;
    };

    flatten(ar); // [1, 3, 1, 4, "a", 5, 65, "b", 9]

方法四,使用reduce简化数组

const ar = [1, 3, [1, 4], ['a', [5, 65, ['b', 9]]]];

    const flatten = arr => {
        return arr.reduce((pre, cur) => {
            if(Array.isArray(cur)) return pre.concat(flatten(cur));
            return pre.concat(cur);
        }, []);
    };

    flatten(ar); // [1, 3, 1, 4, "a", 5, 65, "b", 9]

数组扁平化的思路基本就是循环遍历,递归进行扁平化。

猜你喜欢

转载自www.cnblogs.com/innooo/p/10438791.html
今日推荐