您的位置:首页 > Web前端 > JavaScript

js中数组去除重复项目

2016-06-07 10:51 260 查看
js语法技巧:if(a>=5)alert();可以改写成下边语句:a>=5&&alert();在下文中会用到这种写法

//for循环删除后面重复的速度最快,可用倒序计算可加快速度

varuniqueFor=function(arr){
for(vari=0;i<arr.length-1;i++){
varitem=arr[i];
for(varj=i+1;j<arr.length;j++){
item===arr[j]&&(arr.splice(j,1),j--);
}
};
returnarr;
};

uniqueFor([1,3,5,5,4,5,6,7,8,2,3])



这个方法效率最高,执行结果是先删除前边的,可以改下方法体倒序查询,就可以从后边开始删除了,请感兴趣的读者自己动手实验

//判断对象属性

varuniqueObject=function(arr){
varv,r=[],o={};
for(vari=0;(v=arr[i])!==undefined;i++){
//v取出数组中的一个元素
//如果o的元素中不包含v属性,则将元素存储到r中,并设置o[]=true
!o[v]&&(r.push(v),o[v]=true);
}
returnr;
};


uniqueObject([1,3,5,5,4,5,6,7,8,2,3])



这个方法是通过将数组项目设置为o的属性后,查找属性中是否存在来进行筛选删除的,删除的是数组中靠后的重复项的,改下循环顺序可以删除靠前便的,不过最后还要颠倒一下数组

//数组过滤重复项filter

varuniqueFilter=function(arr){
returnarr.filter(function(elem,pos,self){
//如果没有重复项,返回true,返回false的是有对应的elem会被删除
returnself.indexOf(elem,pos+1)===-1;
});
};


uniqueFilter([1,3,5,5,4,5,6,7,8,2,3])



这个方法是从前边的重复项开始删除的。如果要从后边开始删除,那么删除前线颠倒一下数组吧,删除完毕后再次颠倒回来。

上文中的代码块可以直接复制粘贴到chrome控制台执行查看结果

补充知识点:

array1.filter(callbackfn[,thisArg])

如果callbackfn参数不是函数对象,则将引发TypeError异常


参数

定义

array1

必需。一个数组对象。

callbackfn

必需。一个接受最多三个参数的函数。对于数组中的每个元素,filter方法都会调用callbackfn函数一次。

thisArg

可选。可在callbackfn函数中为其引用this关键字的对象。如果省略thisArg,则undefined将用作this值。

内容来自MSDNhttps://msdn.microsoft.com/library/ff679973%28v=vs.94%29.aspx?f=255&MSPPError=-2147217396
当回调函数返回false时候,对应的项目会被删除
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: