JavaScript 数组去重

Posted minydong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 数组去重相关的知识,希望对你有一定的参考价值。

问题:去除数组里面的重复元素,包括单个元素,对象元素,数组元素

分析:循环遍历数组元素,利用对象属性的唯一性,将数组元素作为对象的属性。如果属性不存在,说明第一次出现,将元素push到新的数组;如果属性存在,说明是重复元素,不做任何操作。

由于对象的属性都为字符串,所有在进行判断元素是否为属性存在的时候,需要将对象元素和数组元素转为字符串。否则会出现所有对象元素在对象中属性相同,为[object Object]的情况。如下:

let arr = [1,2,"a":1,"b":1,[100,99]];
let newArr = [];
let obj = ;
for(let i = 0;i < arr.length;i++)
    if(!obj[arr[i]])
        newArr.push(arr[i]);
        obj[arr[i]] = true;
    

console.log(newArr)
console.log(obj);

技术图片

 

 

 所以,将每个对象元素、字符串元素转为字符串;完整代码如下:

    let arr = [1,"a":1,"b":2,"a":1,"b":2,"b":1,1,1,2,[3,2,1],2,3,4,[1,2],100,[1,2,3]];
    // console.log([...new Set(arr)]);  //数组去重,使用集合去除重复元素,两个形式相同的对象,所属不同内存,不为重复元素。

    //方法:去除数组中的重复元素,包括单个元素、对象元素、数组元素;
    function removeRepeat(arr) 
        var newArr = [];
        var obj = ;
        //遍历数组,如果元素第一次出现,push到新数组;如果不是第一次出现,不操作;
        //判断对象或者数组是不是第一次出现,可将对象或数组转为字符串进行判断
        for(let i = 0;i < arr.length;i++)
            let curEle = arr[i];
            //如果元素为对象
            if(curEle.constructor === Object)
                let objStr = JSON.stringify(curEle); //对象转为字符串对象
                if(!obj[objStr])
                    newArr.push(curEle);
                    obj[objStr] = true;
                
            
            //如果元素为数组
            else if(Array.isArray(curEle))
                let arrStr = curEle.sort().join("-");  //使用join()方法将数组转为字符串
                console.log(arrStr);
                if(!obj[arrStr])
                    newArr.push(curEle);
                    obj[arrStr] = true;
                
            
            //如果元素为单个元素
            else
                if(!obj[curEle])
                    newArr.push(curEle);
                    obj[curEle] = true;
                
            
        
        console.log(newArr);
    
    removeRepeat(arr);

 

总结:

  • 对象、字符串相互转换
  • 数组、字符串相互转换
  • 注意:判断是否为对象的方法:
  • (1)instanceof 需要注意的是由于数组也是对象,因此用 arr instanceof Object 也为true。
  • (2)typeof 也不太准确
  • typeof obj === Object
    
    // 根据typeof判断对象也不太准确
    表达式                          返回值
    typeof undefined           ‘undefined‘
    typeof true                   ‘boolean‘
    typeof 123                   ‘number‘
    typeof "abc"               ‘string‘
    typeof function()        ‘function‘
    
    typeof                    ‘object‘
    typeof []                   ‘object‘
    typeof null                   ‘object‘
    ————————————————
    原文链接:https://blog.csdn.net/zhangjing0320/article/details/81230170
  • 判断是否为对象:
    console.log(.constructor === Object);
    console.log(Object.prototype.toString.call("a":1) === ‘[object Object]‘);
    console.log(jQuery.isPlainObject())

     

以上是关于JavaScript 数组去重的主要内容,如果未能解决你的问题,请参考以下文章

javaScript数组去重方法

JavaScript之数组去重

JavaScript:数组去重

JavaScript数组去重

JavaScript 之 普通数组对象数组的去重(涉及多个场景)

JavaScript 之 普通数组对象数组的去重(涉及多个场景)