2015-10-19 33 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(); 
}