我有一个包含对象的数组(动态生成)。这些对象包含有时重复的数组。
我想知道如何创建一个函数来检查对象中包含的数组,看它们是否重复。
在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;
};
答案 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);