重复的子数组

时间:2016-07-05 15:04:05

标签: javascript javascript-objects

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

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

在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 :(得分: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);