搜尋

首頁  >  問答  >  主體

javascript - 比較變態的陣列去重,求方法! ! !

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

阿神阿神2791 天前570

全部回覆(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

    新合集()

    回覆
    0
  • 取消回覆