前言
数组去重方法繁多,今日项目中偶有小用,决定参略一二,以备他用
方法构建
var list=["老王","老王","老王","老李","老王","老王","老李","老王","小三","小三","老王"];
我们的目标就是将上面的数组去重
想法:
数组去重的本质就是对比然后作用于相同元素或者不同元素,从而达到自己的目的
方法列举:
1.不构建新数组
function derepeat(list){
if(Array.isArray(list)){ //这里是判断传入的数据是否是数组,貌似也可以用instanceof判断吧
for(var i=0;i<list.length;i++){
var temp=list[i];
for(var j=list.length-1;j>i;j--){
if(temp==list[j]){
list.splice(j,1);
}
}
}
}else{
return "数据类型不符合"
}
}
该方法不用新构建数组,在原有的数组上进行比较删除;貌似效率比较低,仁者见仁了;
2.构建新数组
var temp=[];
for(var i=0;i<list.length;i++){
if(temp.indexOf(list[i])==-1){
temp.push(list[i]);
}
}
一句话,简单高效,拿去用法,自己封装
3.ES6 SET方法
var ss=new Set(list);
这里就比较牛逼了,一句话搞定;鉴于就像Java里的set一样,针对业务能力比较弱,用的少,js就不清楚了;
总结归纳
1.去重要学思想,什么循环比较啊,构建新数组啊这些是本质
2.大数据量的效率没有试过,不过一般几万的数据量处理应该不成问题,过大的数据量就赶紧自己写for循环吧,估计没有什么比for循环更高效的了.
3.自己封装的时候记得多一些数据判断,像null,"",undefiend等等,提高用户体验