2012-05-10 64 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