跳到主要内容

1 篇博文 含有标签「ES6」

查看所有标签

· 阅读需 2 分钟

数组去重,老生常谈,记录我觉得比较好的方法

ES5方法

利用对象唯一属性进行去重

var array = [1,1,2,3,4,5,5,6,6,7,8,8];
Array.prototype.distinct = function () {
var array = [];
var obj = {};
for(var i=0;i<this.length;i++){
if(!obj[this[i]]){
array.push(this[i]);
obj[this[i]] = 1;
}
}
return array;
}
console.log(array.distinct());//[1, 2, 3, 4, 5, 6, 7, 8]

利用indexOf属性进行判断

var array = [1,1,2,3,4,5,5,6,6,7,8,8];
Array.prototype.distinct = function () {
var array = [this[0]];
for(var i=0;i<this.length;i++){
if(array.indexOf(this[i]) == -1){
array.push(this[i])
}
}
return array;
}
console.log(array.distinct());//[1, 2, 3, 4, 5, 6, 7, 8]

ES6方法

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。利用他的唯一性就可以进行去重了。

const array = [1,1,2,3,4,5,5,6,6,7,8,8];
console.log(new Set(array));//{1, 2, 3, 4, 5, 6, 7, 8}

此时可以看到原数组已经已经去重了,但是此时结构还不是数组的结构,因此我们还需要用到Array.from方法,Array.from方法可以将 Set 结构转为数组。

const array = [1,1,2,3,4,5,5,6,6,7,8,8];
console.log(Array.from(new Set(array)));//[1, 2, 3, 4, 5, 6, 7, 8]

记录一个多个数组合并去重的好方法

function distinct(){
let arr = [].concat.apply([], arguments);
console.log(arr);
return Array.from(new Set(arr));
}
const a = [1,2,3,5],b = [2,5,8,6],c = [7,8,9];
console.log(distinct(a,b,c));//[1, 2, 3, 5, 8, 6, 7, 9]