zoukankan      html  css  js  c++  java
  • 数组去重

     js 群中有人问数组如何去重,激发一阵热烈讨论。

    如果是在 powershell 中,那就简单了,直接调用 get-unique 方法即可。

    在 js 中,又如何来处理数组去重呢?

    下面谈谈我对此问题的理解。

    ---------------------------------------------

    一种思路是利用数组的 indexOf 方法(用 lastindexOf 应该也可以),此方法会检测传入 indexOf 方法中的值,是否在数组中出现过,如未找到,是返回值 -1 ,由此来判断。

            var arr = [0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1];
            var arr1 = ["red", "green", "blue", "red", "purple", "maroon", "green", "yellow", "blue","red"];
            //利用数组的indexOf方法
            function getUnique(arr) {
                //用数组字面量声明一个空数组,将作为去重后的结果返回
                var result = [];
    
                //利用for遍历传入的测试数组,检测数组中的每个值是否已出现在结果数组中
                //返回 -1 ,则表明无,随即调用数组的 push 方法把此值压入结果数组中
                for (var i = 0; i < arr.length; i += 1) {
                    if (result.indexOf(arr[i]) == -1) {
                        result.push(arr[i]);
                    }
                }
                return result;
            }
    
            alert(getUnique(arr));
            alert(getUnique(arr1));

    ---------------------

    另一思路,则是利用对象特性辅助去重

            //借助 js 对象特性为辅助去重
            
            function getUniquer1(arr) {
                //用数组字面量声明一个空数组,将作为去重后的结果返回
                var result = [];
    
                //用对象字面量声明一个空对象,作为辅助判断当前数组值是否为重复
                var aux = {};
    
                for (var i = 0; i < arr.length; i += 1) {
                    if (!aux[arr[i]]) {     //最关键!判断对象中名为 arr[i] 的属性值是否为 false!
                        result.push(arr[i]);   //调用push方法,把值压入结果数组中
                        aux[arr[i]] = 1;     //重要!给对象中名为 arr[i]的属性赋值!
                    }
                }
                return result;
            }
    
            alert(getUniquer1(arr));
            alert(getUniquer1(arr1));
    

     --------------------------------------------------------华丽的分割线--------------------------------------------

    两种思路,高下立判:

    前者调用 indexOf 方法,每次均需遍历整个数组,设想下,数组中有 10000 项,所耗费时间之大,不可想象。

  • 相关阅读:
    IOS中延迟执行的几种方法
    Xcode6中如何去掉默认的Main.storyboard
    IOS7.0 UILabel实现自适应高度的新方法
    UITabBarController常见代理方法的使用
    Infopath 2010 接收SQL Server数据
    olsr学习之一:Ubuntu10.04下ns2-allinone-2.34安装方法
    常用工具遇到的错误以及解决方法
    笔记本电脑选购个人的一些浅见
    嵌入式题目集锦
    关于网络传输字节顺序的问题: hton? or ntoh?
  • 原文地址:https://www.cnblogs.com/sx00xs/p/6170460.html
Copyright © 2011-2022 走看看