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

    这里提供了3种方法,都比较常见,可以一种一种往下看,越往下,性能越高。

    第一种是比较常规的方法,思路如下:

    1.构建一个新的数组,新的数组同其中一个一样,存放结果

    2.for循环中每次从另一个数组中取出一个元素,用这个元素循环与结果数组对比

    3.若结果数组中没有该元素,则存到结果数组中

    代码如下:

    var arr1 = [1,2,3,4,5,6];
    var arr2 = [9,8,7,6,5,4];
    var arr = unitArray( arr1,arr2 ); alert(arr); function unitArray( arrA,arrB ){ var arr3 = new Array(); for( var i = 0 ; i < arrA.length ; i++ ){ arr3.push(arrA[i]); }; for( var j = 0 ; j < arrB.length ; j++ ){ var repeat = 0; for( var k = 0 ; k < arrA.length ; k++ ){ if( arrB[j] == arrA[k] ){ repeat = 1; }; }; if( repeat == 0 ){ arr3.push( arrB[j] ); }; }; return arr3; };


    第二种方法比上面的方法效率要高。思路如下:

    1.先将两个数组组合到一起,变成一个新数组a1

    2.将这个新数组排序(使用sort函数)

    3.再新建一个数组a2,将a1数组第一个插入新数组a2,然后开始挨个读取a1中的元素与a2的最后一个进行比较,如果不一样则添进a1

    代码如下:
    var arr1 = [1,2,3,4,5,6];
    var arr2 = [9,8,7,6,5,4];
    
    var arrA = arr1.concat(arr2);
    arrA.sort();
    var arrB = new Array();
    arrB.push(arrA[0]);
    
    var lengthA = arrA.length;
    for( var i = 0 ; i < lengthA ; i++ ){
        var num = arrB.length - 1;
        if( arrB[num] != arrA[0] ){
            arrB.push(arrA.shift());
        }else{
            arrA.shift();
        }
    };
    alert(arrB);


    第二种方法也会有一定的局限性,因为在去重前进行了排序,所以最后返回的去重结果也是排序后的。如果要求不改变数组的顺序去重,那这种方法便不可取了。

    第三种方法(推荐使用)。思路如下:

    1.创建一个新的数组存放结果

    2.创建一个空对象

    3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。

    说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。

    代码如下:
    Array.prototype.unique = function(){
        var res = [];
        var json = {};
        for(var i = 0; i < this.length; i++){
            if(!json[this[i]]){
                res.push(this[i]);
                json[this[i]] = 1;
            }
        }
        return res;
    }
    
    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
    alert(arr.unique());

  • 相关阅读:
    网站安全编程 黑客入侵 脚本黑客 高级语法入侵 C/C++ C# PHP JSP 编程
    【算法导论】贪心算法,递归算法,动态规划算法总结
    cocoa2dx tiled map添加tile翻转功能
    8月30日上海ORACLE大会演讲PPT下载
    【算法导论】双调欧几里得旅行商问题
    Codeforces Round #501 (Div. 3) B. Obtaining the String (思维,字符串)
    Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
    Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)
    洛谷 P1379 八数码难题 (BFS)
    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords (贪心)
  • 原文地址:https://www.cnblogs.com/neuscx/p/5001631.html
Copyright © 2011-2022 走看看