跳到主要内容

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

· 阅读需 2 分钟
lzw.

数组扁平化,个人理解就是多维数组转为一维数组,可以了解下 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())))