JavaScript中数组去重的几种方法
1.indexOf
let citys = ['北京','广州',NaN,'上海','深圳','北京','西安','上海',NaN];
let newArr=[];
for(let i=0;i<citys.length;i++){
if(newArr.indexOf(citys[i]) === -1){
newArr.push(citys[i]);
}
}
console.log(newArr);
运行结果:
[
'北京', '广州',
NaN, '上海',
'深圳', '西安',
NaN
]
这种方式的弊端是对于NaN类型,Symbol等类型无法去重。
2.includes
let citys = ['北京','广州',NaN,'上海','深圳','北京','西安','上海',NaN];
let newArr=[];
for(let i=0;i<citys.length;i++){
if(!newArr.includes(citys[i])){
newArr.push(citys[i]);
}
}
console.log(newArr);
运行结果:
[ '北京', '广州', NaN, '上海', '深圳', '西安' ]
3.Set
let citys = ['北京','广州',NaN,'上海','深圳','北京','西安','上海',NaN];
const newArr = Array.from(new Set(citys));
console.log(newArr);
运行结果:
[ '北京', '广州', NaN, '上海', '深圳', '西安' ]
4.filter
let citys = ['北京','广州',NaN,'上海','深圳','北京','西安','上海',NaN];
const newArr = citys.filter((e,i)=>citys.indexOf(e,0) === i);
console.log(newArr);
运行结果:
[ '北京', '广州', '上海', '深圳', '西安' ]
5.Map
let citys = ['北京','广州',NaN,'上海','深圳','北京','西安','上海',NaN];
let map = new Map();
let newArr=[];
for(let i=0;i<citys.length;i++){
if (map.has(citys[i])) {
continue;
} else {
map.set(citys[i], true)
newArr.push(citys[i])
}
}
console.log(newArr);
运行结果:
[ '北京', '广州', NaN, '上海', '深圳', '西安' ]