2016-07-05 91 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);