js中数组去除重复项目

js语法技巧:if(a>=5)  alert();  可以改写成下边语句:  a>=5&&alert(); 在下文中会用到这种写法


//
for循环删除后面重复的 速度最快,可用倒序计算可加快速度 var uniqueFor = function(arr) { for (var i = 0; i < arr.length - 1; i++) { var item = arr[i]; for(var j = i+1; j < arr.length; j++ ) { item === arr[j] && (arr.splice(j, 1), j--); } }; return arr; };

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

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

//判断对象属性

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

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

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

//数组过滤重复项filter

var uniqueFilter = function(arr) {
    return arr.filter(function(elem, pos, self) {
        // 如果没有重复项,返回true,返回false的是有对应的elem会被删除
        return self.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 值。

 

 

 

 

 

 

内容来自MSDN  https://msdn.microsoft.com/library/ff679973%28v=vs.94%29.aspx?f=255&MSPPError=-2147217396

当回调函数返回false时候,对应的项目会被删除

 

posted @ 2016-06-07 10:51  Myisqq  阅读(465)  评论(0编辑  收藏  举报