javascript – Eine ziemlich perverse Array-Deduplizierung, bitte finden Sie eine Methode! ! !
阿神
阿神 2017-05-19 10:19:12
0
5
555

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

阿神
阿神

闭关修行中......

Antworte allen(5)
習慣沉默

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

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);
巴扎黑

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

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

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

刘奇

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

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);
给我你的怀抱

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage