2012-08-09 80 views
1

有一個標記數組,每個標記都屬於一個或多個類別。基於類別的過濾器數組

你將如何實現一個搜索/過濾器來檢索cat = X的所有標記?

例如:

  • 所有貓= 9標記?
  • cat = 5和9的所有標記?
Gmaps.map.markers = [ 
    {"id":9,"cat":"3, 5, 6","lat":"52.50","lng":"13.32"}, 
    {"id":11,"cat":"3","lat":"52.51","lng":"13.44"}, 
    {"id":12,"cat":"1, 2, 5","lat":"47.89","lng":"10.62"}, 
    {"id":13,"cat":"1, 2, 3, 4, 5","lat":"47.77","lng":"10.61"}, 
    {"id":15,"cat":"1, 6","lat":"40.60","lng":"-73.44"}, 
    {"id":16,"cat":"1, 3, 5, 9","lat":"51.89","lng":"17.16"}, 
    {"id":17,"cat":"9","lat":"52.37","lng":"9.73"} 
]; 
+1

我注意到有貓的id你的結構內的逗號分隔的列表。如果不使用正則表達式,數組可能更容易進行精確的搜索。 – dqhendricks 2012-08-09 15:18:42

+2

你有沒有試過['Array.prototype.filter'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter)? – Zeta 2012-08-09 15:32:20

+0

@dqhendricks:你可以在'','''上將字符串'分開'。 – 2012-08-09 16:00:31

回答

0

修改它找貓4以及...

function findMarkersContaining (markers, needleArray) { 
    var matches = []; 
    var markerLength = markers.length; 
    var needleArrayLength = needleArray.length; 
    for (var i = 0; i < markerLength; i++) { 
     for (var e = 0; e < needleArrayLength; e++) { 
     var singleNeedle = needleArray[e]; 
     if ($.inArray(singleNeedle, markers[i].cat.split(",")) !== -1) { 
      matches.push(markers[i]); 
     } 
     } 
    } 
    return matches; 
}; 
0

事情是這樣的,它使用正則表達式來找到在needleArray是否逗號分隔列表中的貓中發現,如果是這樣,那標記添加到返回的數組。

function findMarkersContaining (markers, needleArray) { 
    var matches = []; 
    var markerLength = markers.length; 
    var needleArrayLength = needleArray.length; 
    for (var i = 0; i < markerLength; i++) { 
     for (var e = 0; e < needleArrayLength; e++) { 
     var regex = new RegExp('(^|)' + needleArray[e] + '(,|$)'); 
     if (markers[i].cat.search(regex) !== -1) { 
      matches.push(markers[i]); 
     } 
     } 
    } 
    return matches; 
} 
+0

@ 3raindrops這正是你想要的嗎?這些記錄都包含逗號分隔列表中值爲「1」的cat。 – dqhendricks 2012-08-09 22:45:41

+0

@ 3raindrops我剛剛注意到,不過你的第二種情況要求兩個cat id都存在,我寫的函數會返回結果,如果其中任何一個cat id都存在的話(基本上cat = 5 **或** 9而不是cat = 5 **和** 9)。但是,代碼不應該很難修改,只能按照您的要求進行操作。 – dqhendricks 2012-08-09 22:47:44

+0

是的,貓X和Y和Z ...會是理想的,那就是我的目標!但現在我修改它,以找到貓4以及... – 3raindrops 2012-08-09 23:52:59