`
小青缨
  • 浏览: 9651 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

javaScript数组去重

 
阅读更多

数组去重,首先要明确数组里面每一项的数据类型,如果是同类型的数据,那就会简单很多了,最头疼的还是遇到数组里有对象的情况。下面分成3种情况来实现吧。


(1)数组里面都是同一类型的,例如number,string,array,但不是object

 

function clear(arr){  
        var temp={},result=[];  
        for(var i=0;i<arr.length;i++){  
            if(!temp[arr[i]]){  
                result.push(arr[i]);  
                temp[arr[i]]=true;  
            }  
        }  
        return result;  
    }
 

 

 这里的做法是新建一个temp对象,遍历数组,没遍历一次给对象temp添加一个属性,属性名是给数组那一项的值,再给它的属性值设为true,下一次遍历的时候遇到这个属性对应的属性值为true时,则代表数组中之前有相同的数据。


(2)数组中的数据类型不定,但是没object

 

 

function clear2(arr){
        var temp={},result=[];
        for(var i in arr){
            /*i为arr的index,不是具体的值,如果是对象,则为对象的属性名*/
            if(!temp[typeof(arr[i])+arr[i]]){
                result.push(arr[i]);
                //给对象temp中添加属性名为arr[i]的类型和arr[i]值的属性,防止搞混
                temp[typeof(arr[i])+arr[i]] = true;
            }
        }
        return result;
    }
 

 这个和上面的区别是,给对象添加属性的属性名除了数组的值还加上的类型

 

(3)数组中有对象

 

方法一:用递归方法,当对象中有属性是对象的时候,调用当前方法。这个是我从网上看来的,以下的解释大部分是我的猜想。

 

先写一个判断两个值是不是相等的方法

 

 function isEqual(obj1,obj2){
        /*是string和number,undefined,的情况*/
        if(obj1===obj2){
            return true;
        }
        /*不是对象或者为空的情况*/
        if(!(obj2 instanceof Object) || (obj2===null)){
            return false;
        }
        var p=0;
        for(k in obj1){
            p++;
            var o1 = obj1[k],
                  o2 = obj2[k];
            if((o1!=null)&&!isEqual(o1,o2)){
                return false;
            }
        }
        /*判断两个对象中的属性对是不是一样的*/
        for(var k in obj2){
            p--;
        }
        return p==0;
    }
 

如果有一个(这里是obj2)不是对象,则返回false,因为两个都不是对象的且相等的话第一步就直接return true了;如果obj2是对象,但是obj1不是对象,那么关于obj1的for循环就不会执行,obj2的循环执行了,那样就会出现p的值不一样,但是如果obj2是空对象的话,p值还是等于0,这种还没测试过;如果两个都是对象,那么就进行比较了。

数组去重函数,调用了isEqual

 

function clear4(arr){
        var temp=[arr[0]];
   out:   for(var i=0;i<arr.length;i++){
            for(var j=0;j<temp.length;j++){
                if(isEqual2(arr[i],temp[j])){
                    continue out;
                }
            }
            temp.push(arr[i]);
        }
        return temp;
    }
 

新建一个数组temp,里面有一个数组就是arr[0],然后将arr里面的数据和temp里面的比较,如果有相同的就进行下一次的循环,没有相同的就添加到temp里。

 

方法二:将对象变成字符串的形式再比较,这里主要是修改isEqual方法

 

先写对象变成字符串方法

 

 

 function objtostr(obj){
        var temp = [];
        for(var i in obj){
            temp.push(i);
            temp.push(obj[i]);
        }
       return  temp.join('');
    }
 

 将isEqual方法写成

 

 

function isEqual2(obj1,obj2){
        if(obj1===obj2){
            return true;
        }
        if((obj1 instanceof Object) && (obj2 instanceof Object)){
            return objtostr(obj1) === objtostr(obj2);
        }
        return false;
    }

 

感觉还是根据需求来决定用哪种方法,即便都是对象也不必一定非得比较完对象里的所有属性,可以挑出具有唯一性的比较

 

 

 

分享到:
评论

相关推荐

    JavaScript数组去重功能的设计与实现.pdf

    JavaScript数组去重功能的设计与实现 本文主要讨论了JavaScript数组去重功能的设计与实现,以解决在数据处理过程中产生大量重复数据的问题。文章首先介绍了JavaScript的基本概念,包括ECMAScript、DOM、BOM三个部分...

    php数组去重和js数组去重最简方法

    对于JavaScript数组去重,有多种简单的方法。首先是使用ES6的Set对象,Set类似于数组,但不允许重复值: ```javascript let uniqueArray = [...new Set(array)]; ``` 这段代码首先创建一个Set,然后使用扩展运算符`...

    JavaScript数组去重1

    JavaScript数组去重是编程中常见的需求,特别是在处理数据集合时,确保数据的唯一性非常重要。以下将详细讲解几种常见的JavaScript数组去重方法。 1. **新建数组法**: 这是最基础的方法,通过创建一个新的空数组...

    javascript数组去重小结_.docx

    JavaScript数组去重是编程面试中常见的算法问题,主要目的是消除数组中的重复元素,确保每个元素在结果数组中只出现一次。本文将总结四种常见的JavaScript数组去重方法,并分析它们的优缺点。 首先,我们来看**循环...

    【JavaScript源代码】JavaScript数组去重问题的深入研究.docx

    ### JavaScript数组去重技术深入研究 #### 前言 数组去重是在处理大量数据时经常遇到的问题之一。为了提高程序效率以及代码的可读性和维护性,掌握多种不同的数组去重方法至关重要。 #### 最初的方法:双层循环 ...

    JavaScript Array数组去重源码下载

    JavaScript Array数组去重源码下载

    JavaScript数组去重的方法总结【12种方法,号称史上最全】

    本文实例总结了JavaScript数组去重的方法。分享给大家供大家参考,具体如下: 数组去重,一般都是在面试的时候才会碰到,一般是要求手写数组去重方法的代码。如果是被提问到,数组去重的方法有哪些?你能答出其中的...

    javascript实现数组去重的多种方法_.docx

    javascript 实现数组去重的多种方法_ javascript 实现数组去重的多种方法是指使用javascript 语言实现数组去重的多种方法。数组去重是指将数组中重复的元素删除,得到一个没有重复元素的新数组。下面将介绍多种实现...

    JavaScript数组去重的几种方法

    本文将从几个不同的角度介绍JavaScript数组去重的方法,旨在帮助读者掌握数组去重的技巧。 首先,数组去重的核心思想可以分为两大类。一是通过遍历数组,比较数组内部元素,然后将唯一的元素添加到新的数组中;二是...

    JavaScript 数组去重并统计重复元素出现的次数实例

    通过对数组去重以及统计重复元素出现次数的实现,能够帮助开发者更好地了解JavaScript数组操作。本文提供的两种方法各有优劣,方法一虽然较为繁琐,但兼容性好,适用于低版本的JavaScript环境;方法二简洁高效,但需...

    javascript数组去重3种方法的性能测试与比较

    本文将探讨三种不同的JavaScript数组去重方法,并对它们的性能进行测试和比较。 首先,我们来看第一种方法,这种方法是通过创建一个对象来存储数组元素作为键,利用JavaScript对象的特性,相同的键值不会被覆盖,...

    JavaScript数组去重的6个方法

    本文将介绍6种不同的方法来实现JavaScript数组去重,这些方法适用于不同的场景和需求。 1. **基础方法(O(n^2)**: 这是最直观的方法,通过两层循环检查元素是否存在。首先,创建一个新的空数组`res`,然后遍历原...

    JavaScript学习笔记之数组去重_.docx

    本文将详细介绍几种常见的JavaScript数组去重方法,并通过示例代码展示其实现过程。 #### 二、双重循环去重 ##### 2.1 方法概述 双重循环去重是最直观的一种方法。它的基本思想是使用两个嵌套循环来检查数组中的...

    JavaScript数组去重算法实例小结

    JavaScript数组去重是前端开发中常见的问题之一,尤其是在处理数据时,为了保证数据的唯一性,常常需要去除数组中的重复元素。本文将针对JavaScript数组去重算法进行详细讲解,并通过实例分析去重操作涉及的读写、...

    JavaScript数组去重的几种方法效率测试

    JavaScript数组去重是前端面试酷爱的问题,问题简单而又能看出程序员对计算机程序执行过程的理解如何。数组去重的方法有很多,到底哪种是最理想的我不清楚。于是我测试了下数组去重的效率。测试二十万个数据,随着...

    javascript数组去重方法分析

    本文将详细解析两种JavaScript数组去重的方法,并提供一些额外的在线工具供参考。 ### 方法一:使用`indexOf()`方法 这种方法基于`indexOf()`函数来检测数组中的元素是否已经存在。`indexOf()`返回指定元素在数组...

    JavaScript数组去重的五种方法

    JavaScript数组去重是一个常见的编程问题,特别是在处理数据集合时。以下将详细介绍五种常见的JavaScript数组去重方法: 1. **删除后面重复的**: ```javascript function ov(arr) { for (var i = 0; i ; i++) {...

Global site tag (gtag.js) - Google Analytics