实现 js 数组扁平化去重并排序

数组扁平化,个人理解就是多维数组转为一维数组,可以了解下 Array.prototype.flat() 方法。下面实现这样一个需求

let arr = [1,2,[1,2,9,8,7],[5,4],6]     

//输出[ 9, 8, 7, 6, 5, 4, 2, 1 ]

1、比较传统一点的方法实现,比如函数

let queueArr = [];
! function flat(arr) { //扁平化
    for (let i = 0; i < arr.length; i++) {
        if (Array.isArray(arr[i])) {
            flat(arr[i])
        } else if (queueArr.indexOf(arr[i]) < 0) {
            queueArr.push(arr[i])
        }
    }
}(arr)

! function sort(arr) { //排序
    for (var i = arr.length - 1; i > 0; i--) {
        for (var j = 0; j < i; j++) {
            if (arr[j] > arr[j + 1]) {
                [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
            }
        }
    }
    queueArr = arr
}(queueArr)
console.log(queueArr)

上面的代码相对比较多,但容易看懂

2、下面使用 es6 的新特征,快速完成需求

let flatArr = [];
flatArr = arr.flat() //扁平化
flatArr = new Set(flatArr) //去重复
flatArr = Array.from(flatArr).sort((a, b) => { //排序
    return a - b;
})
console.log(flatArr);

感觉 es6 新特性非常多,但方便了代码

3、还有一句代码搞定的

console.log(Array.from(new Set(arr.toString().split(',').sort())))

小刘

纸上得来终觉浅,绝知此事要躬行

你可能也会喜欢...

发表评论

电子邮件地址不会被公开。 必填项已用*标注