数组去重的方法总结

复制代码
<!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 @   驸马爷  阅读(226)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示