搜索

首页  >  问答  >  正文

javascript - 比较变态的数组去重,求方法!!!

var a = ['你好',{你好:'323651',再见:'43434'},[1,2,34],true,10,9,8,10,'true','你好',true ,假,9,{你好:'312312',好的:32323},[1,2,34]];

阿神阿神2786 天前565

全部回复(5)我来回复

  • 習慣沉默

    習慣沉默2017-05-19 10:21:12

    数字,布尔型等直接在后面加判断就好,加在一起也行,我这么写你看着更明白。

    var a = ['{"1":1,"2":2}', {1:1, 2:2}, 'hello',{hello: '323651',bye: '43434'},[1,2,34],true,10,9,8,10,'true','hello',true,false,9,'9',{hello: '312312',ok: 32323},[1,2,34]];
    var json = {};
    var arr = [];
    for (let i = 0, len = a.length; i < len; i++) {
      let str = JSON.stringify(a[i]) + typeof a[i];
      if (!json[str]) {
        arr.push(a[i]);
      }
      json[str] = 1;
    }
    console.log(arr);

    回复
    0
  • 巴扎黑

    巴扎黑2017-05-19 10:21:12

    对象vs对象 和 数组vs数组 递归处理,其它情况直接比较。

    1. 直接 === 判断,相等则完事。

    2. 不相等的情况,如果是 对象vs对象 或者 数组vs数组 再 JSON stringify 对比,其它的完事。

    回复
    0
  • 怪我咯

    怪我咯2017-05-19 10:21:12

    如果对象顺序顺序或者内部数组元素时有序数组的话就元素转字符串后比较.

    var arr1 =[...],arr2=[....],arr3=[];
    var rst = [];
    var process = function(arr){
        arr.forEach(funciton(v,i){
            var v2s;
            if(v.constructor === Object){
                v2s = JSON.stringify(v);  
            } else if( v.constructor === Boolean){
                v2s = "'"+v.toString()+"'"
            } else {
                v2s = v.toString();
            }
            if (arr3.indexOf(v2s)<0){
                arr3.push(v2s);
                rst.push(v);
            }
        })
    }
    process(arr1);
    process(arr2);
    console.log(rst);

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:21:12

    JSON 之间最好还是用另一个字符来间隔,如果只能按目前这样,就用'hello'来拆分数组,再来比较去重。

    回复
    0
  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:21:12

    new Set()

    回复
    0
  • 取消回复