数组去重的方法总结

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数组去重的 3种方法</title>
</head>
<body>

    <script type="text/javascript">
        var demoAr = [3,4,5,5,7,2,1,4,3]; 

        // 方法一:遍历数组,建立新数组,利用indexOf判断是否存在于新数组中,不存在则push到新数组,最后返回新数组
        function unique1(ar){
            var newAr = [];
            for( var i=0; i<ar.length; i++ ){
                if( newAr.indexOf(ar[i]) === -1 ){
                    newAr.push(ar[i]);
                }
            }
            return newAr;
        }

        // 方法二:遍历数组,利用object对象保存数组值,判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存
        function unique2(ar){
            var newAr = [];
            var obj = {};
            
            for(var i=0, j=ar.length; i<j; i++){
                if( !obj[ar[i]] ){
                    obj[ar[i]] = 1;
                    // console.log(obj);
                    newAr.push(ar[i]);
                }
            }
            return newAr;
        }

        // 方法三:数组下标判断法, 遍历数组,利用indexOf判断元素的值是否与当前索引相等,如相等则加入
        function unique3(ar){
            var newAr = [];
            ar.forEach(function(item, index, array){
                if( ar.indexOf(item) === index ){
                    newAr.push(item);
                };
            });
            return newAr;
        }

        // 方法四:数组先排序, 然后比较俩数组一头一尾进行去重 (优点:效率高  缺点:会改变数组原有顺序)
        function unique4(ar){
            var newAr = [],
                end;
            ar.sort();
            end = ar[0];
            newAr.push(ar[0]);
            for( var i=1; i<ar.length; i++ ){
                if(ar[i]!=end){
                    newAr.push( ar[i] );
                    end = ar[i];
                }
            }

            return newAr;    
        }
console.log( unique1(demoAr) );
// console.log( unique2(demoAr) ); // console.log( unique3(demoAr) ); // console.log( unique4(demoAr) );

</script> </body> </html>

 

参考自:http://www.cnblogs.com/leonwang/p/4845576.html

 

posted @ 2017-05-22 23:24  驸马爷  阅读(226)  评论(0编辑  收藏  举报