2016-07-05 63 views
0

我有一个包含对象的数组(动态生成)。这些对象包含有时被复制的数组。重复的子阵列

我不知道如何做一个函数来检查包含在对象中的数组,看看它们是否重复。

在javascript中。

尝试使用以下函数,但它只会检查第一个子数组中的对象。不适用于其他子阵列。

var check = function (a){ 
       var retval = []; 
       for (var j = 0, u = a.length; j < u; j++) { 
        if (a[j].items && a[j].items.length > 1){ 

         check(a[j].items); 
        } 
        for (var k = j + 1, v = a.length; k < v; k++) { 
         if (a[j] && a[k]){ 
          if (a[j]._id == a[k]._id) { 

          } 
          else{ 
           retval.push(a[j]); 
          } 
         } 
        } 
       } 
       return retval; 
      }; 
+1

请向我们提供您已经尝试的事情,包括足够的数据 –

+0

的[对象/数组的深度比较(可能的复制http://stackoverflow.com/questions/13142968/深度比较对象数组) – WalksAway

+0

没有重复。 @GeorgeJempty,主编编辑。 – xjose97x

回答

0

你可以使用recusion这个。

例子: https://jsfiddle.net/89agjx2c/

var init = function(){ 
    var one = new Array(); 
    var two = new Array(); 

    root = new Array(); 
    root.push(one); 
    root.push(two); 

    var one_one = {'id': 1, 'name':"one_one"}; 
    var one_two = {'id': 2, 'name':"one_two"}; 

    var two_one = {'id': 3, 'name':"one_two"}; 
    var two_two = {'id': 1, 'name':"one_one"}; 

    one.push(one_one); 
    one.push(one_two); 

    two.push(two_one); 
    two.push(two_two); 
} 

this.check = function(_array){ 
    for (var element in _array) { 
    if(Object.prototype.toString.call(_array[element]) === '[object Array]'){ 
      // Found an array 
     this.check(_array[element]); 
    } else{ 
     // Found an object 
     toCheck = JSON.stringify(_array[element]); 
     counter = 0; 

      this.checkDuplicates(root, toCheck); 
      if(counter == 2){ 
     console.log("duplicate found for item: " + toCheck) 
     } 
    } 
    } 
} 

this.checkDuplicates = function(_array, toCheck){ 
    for (var element in _array) { 
    if(Object.prototype.toString.call(_array[element]) === '[object Array]'){ 
      // Found an array 
     this.checkDuplicates(_array[element], toCheck); 
    } else{ 
     // Found an object 
     if(JSON.stringify(_array[element]) === toCheck){ 
     counter++; 
     } 
    } 
    } 
} 

init(); 
check(root);