zoukankan      html  css  js  c++  java
  • 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时候,对应的项目会被删除

  • 相关阅读:
    剑指offer--树的子结构
    剑指offer--合并两个排序的链表
    剑指offer--链表中倒数第k个节点
    剑指offer--反转链表
    JavaScript一个简单的显示隐藏功能
    css之animition动画帧
    css之3D变换
    css之过渡、变换
    css之!important
    分栏
  • 原文地址:https://www.cnblogs.com/netqq/p/5566230.html
Copyright © 2011-2022 走看看