JS数组扁平化的5种方式

ES6提供的Array.prototype.flat方法

let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

arr = arr.flat(Infinity);

arr = Array.from(new Set(arr)).sort((a, b) => a-b)

console.log(arr)  //[1, 2, 3, 4, 5, 6, 7, 10, 12, 16]

toString()方法

let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

arr = arr.toString().split(',').map(item => Number(item))

console.log(arr)  //[1, 2, 3, 4, 5, 6, 7, 10, 12, 16]

JSON.stringify()方法

let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

arr = JSON.stringify(arr).replace(/(\[|\])/g, '').split(',').map(item => Number(item))

console.log(arr)  //[1, 2, 3, 4, 5, 6, 7, 10, 12, 16]

数组中的some()方法

let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

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

console.log(arr)  //[1, 2, 3, 4, 5, 6, 7, 10, 12, 16]

递归

let arr = [10,[1,2],[12,[3,4,[5,6,16]],6,6],7];

~function () {
    function myFlat () {
        let res = [], _this = this;
        let fn = (arr) => {
            for (let i = 0; i < arr.length; i++) {
                let item = arr[i]
                if (Array.isArray(item)) {
                    fn(item)
                    continue
                }
                res.push(item)
            }
        }
        fn(this)
        return res
    }
    Array.prototype.myFlat = myFlat
}()

arr = arr.myFlat()

arr = Array.from(new Set(arr)).sort((a, b) => a-b)

console.log(arr)  //[1, 2, 3, 4, 5, 6, 7, 10, 12, 16]
发布了18 篇原创文章 · 获赞 3 · 访问量 813

猜你喜欢

转载自blog.csdn.net/qq_16049879/article/details/104269830