2012-05-10 61 views
0

我有以下列格式的數組:JavaScript的比較數組

var markers = [ 
    ['Title', 15.102253, 38.0505243, 'Description', 1], 
    ['Another Title', 15.102253, 38.0505243, 'Another Description', 2], 
    ['Title 3', 15.102253, 38.0505243, 'Description 3', 3], 
]; 

我然後有一個查詢字符串被傳遞給頁面(M = 1,2),其被逗號分隔,然後分流到創建一個數組,如下所示:

['1', '2'] 

我需要做的是找到所有的「標記」,其中ID(標記[I] [4])來自查詢字符串。

什麼是最好的方法來實現這一目標?理想情況下,我想創建與「標記」相同格式的第三個數組,但只顯示查詢字符串的結果。

任何幫助將不勝感激。

感謝

回答

2

一種選擇是使用嵌套循環:

var markers = [ 
    ['Title', 15.102253, 38.0505243, 'Description', 1], 
    ['Another Title', 15.102253, 38.0505243, 'Another Description', 2], 
    ['Title 3', 15.102253, 38.0505243, 'Description 3', 3], 
]; 
var search = ['1', '2']; 
var result = []; 

for (var i = 0; i < search.length; i++) 
    for (var j = 0; j < markers.length; j++) 
     if (search[i] == markers[j][4]) { 
      result.push(markers[j]); 
      break; 
     } 

console.log(result); 

DEMO:http://jsfiddle.net/3TErD/

+0

捕捉! +1也用於描述設置步驟! – dougajmcdonald

+0

太棒了 - 謝謝你。這麼多的變化,但這一個需要我的選擇。感謝您的演示鏈接:) – digitalclubb

+0

不客氣;) – VisioN

2

你不能只用一個嵌套的循環嗎?

var filteredMarkers = []; 

for(var i = 0; i < markers.length; i++) { 

    for(var j = 0; j < queryStringArray.length; j++) { 

     // this might need to be changed as your markers has index 4 as a number whereas the queryString array appears to be strings. 
     if(markers[i][4] === queryStringArray[j]) { 

      filteredMarkers.push(markers[i]); 
      break; 

     } 

    } 

} 
+0

只需添加'Number(queryStringArray [j])' –

+0

是的,有很多方法可以解決這個潛在問題,問題是圍繞兩個數組之間匹配值的邏輯儘管如此,作爲一個解決方案,沒關係,我猜! – dougajmcdonald

+0

對於作者的陣列,你的變種會比我的變種多一個循環;) – VisioN