2015-10-19 35 views
0

所以我有两个数组,比较数组用于匹配的元素

ARR1包含了一个ID列表:

var arr1 = new Array(1,2,3); 

ARR2含有id's匹配的IDS对象的列表我ARR1

var2 = [ 
{id:1, 
name: "bob"}, 
{id:2, 
name:"Moore"} 
] 

我该如何'循环'这些数组,并且在发现匹配时发生一些代码?

+0

开始[这](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration) – hindmost

+0

你要什么时,他们发现这样做?你想收集所有来自var2的项目与arr1中的id匹配吗?另外,你有什么尝试? –

+1

'var2'数组有一些无效值。假设名字是字符串.. –

回答

0

遍历ID阵列检查每一个针对对象阵列。对象数组I中的一些无效值在下面修复。

var arr1 = new Array(1,2,3); 
var arr2 = [ 
    { 
     id:1, 
     name: 'bob' 
    }, 
    { 
     id:2, 
     name: 'moore' 
    } 
]; 

var results = []; 
var index = 0, length = arr1.length; 
for (; index < length; index++) { 
    var subIndex = 0, subLength = arr2.length; 
    for (; subIndex < subLength; subIndex++) { 
     if (arr1[index] == arr2[subIndex].id) { 
      results.push(arr2[subIndex]); 
     } 
    } 
} 
console.log(results); 
+1

非常感谢大家。我实际上将@tymeJV与这个答案结合在一起,因为这个也会将结果推送到一个数组中。谢谢你们俩! – RogerDore

0

这是一个 “关联数组”

for(var i = 0;i<var2.length;i++){ 
    if(var2[var1[i]]){ 
     //do some mother trucking code 
    } 
    } 

我在想别的事情其实。为什么不只是为循环加倍?

for(var i = 0;i<arr1.length;i++){ for(var j = 0;j<var2.length;j++){ if(arr1[i] === var2[j].id){ //do stuff } } } 
+0

http://www.w3schools.com/js/js_arrays.asp –

+0

我在想其他的东西。 为什么不只是双循环? (var i = 0; j

0

看,检查,逻辑:

for (var i = 0; i < arr1.length; i++) { 
    for (var j = 0; j < var2.length; j++) { 
     if (arr1[i] == var2[j].id) { 
      //logic for match 
     } 
    } 
} 
1

如果我需要这些匹配,我会使用filter

var matches = arr2.filter(function (item) { 
    return arr1.indexOf(item.id) > -1; 
}); 

然后,我会尽我所需与matches

如果我只是需要看看是否存在,我会使用some。从

var hasMatch = arr2.some(function (item) { 
    return arr1.indexOf(item.id) > -1; 
}); 

if (hasMatch) { 
    doSomething(); 
}