文章目录
比较有效的方法(去除NaN)是下面的第4 7 8中方法
var a = [1,4,2,6,3,2,1,6,9,6,3,undefined,NaN,undefined,NaN];
var b = [];
1. 旧数组内容和新数组内容比较
for (var i = 0;i < a.length;i ++){
var flag = true;
for (var j = 0;j < b.length; j++){
if(a[i] == b[j]){
flag = false;
break;
}
}
if(flag){
b.push(a[i]);
}
}
a = [ 1, 4, 2, 6, 3, 2, 1, 6, 9, 6, 3, undefined, NaN, undefined, NaN ]
b = [ 1, 4, 2, 6, 3, 9, undefined, NaN, NaN ]
缺点:不能识别NaN
2. 去跟数组后面的内容对比
for (var i = 0;i < a.length;i ++){
var flag = true;
for (var j = i+1;j < a.length; j++){
if(a[i] == a[j]){
flag = false;
break;
}
}
if(flag){
b.push(a[i]);
}
}
a = [ 1, 4, 2, 6, 3, 2, 1, 6, 9, 6, 3, undefined, NaN, undefined, NaN ]
b = [ 4, 2, 1, 9, 6, 3, NaN, undefined, NaN ]
缺点:不能识别NaN
3. 对老的数组进行删除操作
for (var i = 0;i < a.length;i ++){
for (var j = i+1; j < a.length; j++){
if (a[i] == a[j]){
a.splice(j,1);
}
}
}
a = [ 1, 4, 2, 6, 3, 9, undefined, NaN, NaN ]
缺点:不能识别NaN
4. 利用对象属性不重复性
let c = new Object();
for (var i = 0;i < a.length; i++){
if(c[a[i]]){
continue;
}
c[a[i]] = true;
b.push(a[i]);
}
a = [ 1, 4, 2, 6, 3, 2, 1, 6, 9, 6, 3, undefined, NaN, undefined, NaN ]
b = [ 1, 4, 2, 6, 3, 9, undefined, NaN ]
5. 进行排序之后去重
a.sort(function (a,b) {
return a-b;
});
for (var i = 1;i < a.length;i ++){
if(a[i] == a[i-1]){
a.splice(i,1);
i--;
}
}
a = [ 1, NaN, 2, 3, 4, 6, 9, NaN, undefined ]
缺点:不能识别NaN
6. 用indexOf,传入两个参数,从当前位置的后面开始查看
a.forEach(function (item,index,arr){
if(arr.lastIndexOf(item) == index){
b.push(item);
}
});
a = [ 1, 4, 2, 6, 3, 2, 1, 6, 9, 6, 3, undefined, NaN, undefined, NaN ]
b = [ 4, 2, 1, 9, 6, 3, undefined ]
缺点:将NaN全部去除
7. es6方法去重
b =Array.from(new Set(a));
a = [ 1, 4, 2, 6, 3, 2, 1, 6, 9, 6, 3, undefined, NaN, undefined, NaN ]
b = [ 1, 4, 2, 6, 3, 9, undefined, NaN ]
优点:简单,方便
缺点:兼容性可能存在问题
8. 使用拓展运算符去重
本质和方法7一致
[...new Set(a)];
//1 4 2 6 3 9 undefined NaN