JavaScript里有多种方法可以用来对数组元素去重。
ES6 Set
ES6提供了一个Set对象,用它可以很简单便可以对数组元素去重。
function uniq(arr) {
return Array.from(new Set(arr));
}
filter
另外也可以通过filter来对数组元素去重。
function uniq(arr) {
return arr.filter(function(item, pos,self) {
return self.indexOf(item) == pos;
});
}
这种方法很简单,如果是对于大数组,效率相对低。
改进版
function uniq(arr) {
var seen = {};
return arr.filter(function(item) {
return seen.hasOwnProperty(item) ? false : (seen[item] = true);
});
}
注意:使用hasOwnProperty不能用于对象数据,如{name:"张三"}和{name:"李四"},hasOwnProperty返回的都为true。
此方法用于基本类型,如boolean,number,string是没有问题。