• 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时候,对应的项目会被删除

  • 相关阅读:
    .net 下webservice 的WebMethod的属性
    做一个项目,平时都用到哪些工具提高效率(James Li)
    Android之解析Android Map地图返回的Json数据
    歌词文件LRC的解析,可用于音乐播放器实现歌词同步操作
    Android之创建程序快捷方式
    Android之Bitmap使用心得(持续更新)
    Socket编程之旅(服务器与客户端沟通)
    Android之应用自定义相机拍照并且对拍照文字(英文)进行识别
    android之App widget实际应用Demo
    Android之创建实时文件夹
  • 原文地址:https://www.cnblogs.com/netqq/p/5566230.html
Copyright © 2020-2023  润新知