2016-09-26 96 views
0

我有2个对象数组。检查相同元素的阵列,然后推到第三个阵列

比方说:

arr1 = [object, object, object]; 

arr2 = [object, object, object]; 

我如何在它们之间迭代并检查是否有同一个对象的属性值,然后推入第三个阵列。 我曾经尝试这样做:

for(var i = 0; i < arr1.length; i++){ 
    for(var j = 0; j < arr2.length; j++){ 
     if (arr1[i].id == arr2[j].id){ 
      arr3.push(arr1[i]) 
    } 
    } 

这不起作用然而

+0

什么部分不起作用?你有任何控制台错误?我看起来很合理。你会得到什么输出?你确定你实际上有任何具有相同'id'的匹配对象吗? – musefan

+0

这两个数组中的对象是否具有相同的顺序? –

+0

@MB不,他们不是,这是一个问题吗? –

回答

3

你缺少右花括号中,它的作品你的if语句,其他吴丹:

for(var i = 0; i < arr1.length; i++){ 
    for(var j = 0; j < arr2.length; j++){ 
     if (arr1[i].id == arr2[j].id){ 
      arr3.push(arr1[i]) 
     } 
    } 
} 
+0

我认为这是一个错字,否则我会得到一个语法错误 –

+0

好吧,我运行你的代码,它适用于我,如果它不与固定分号一起工作,那么问题可能与您的对象中的数据 – StackOverMySoul

1

如果你不不介意使用第三方库,.. lodash有一个功能,将为你做。

例如。

var arr3 = _.intersectionWith(arr1,arr2,function (a,b) { return a.id === b.id }) 
1

为什么嵌套循环,如果你只需要1(甚至没有)?

arr1.forEach(object => { 
    if (arr2.indexOf(object) !== -1) { 
     arr3.push(object); 
    } 
});