2012-12-18 68 views
1

好吧,我在這裏錯過了一些東西,我似乎無法找到它,因爲邏輯對我來說似乎是正確的,但我確定我沒有看到錯誤。檢查相似性

var VisibleMarkers = function() { 
var filtered = _.reject(Gmaps.map.markers, function(marker) { 
    return marker.grade != $('.mapDataGrade').val() && !_.contains(marker.subjects,$('.mapDataSubjects').val()) 
    }); 
return filtered 
} 

我正在使用underscore.js和jQuery來簡化我的JavaScript工作。

所以現在,我通過選擇哪些數據被拒絕,然後我在(谷歌)地圖上顯示過濾的標記(如果它有幫助的話,這是使用gmaps4rails完美工作好吧,它的這一點的JavaScript,使我失去了我頭上最後的頭髮)。

目前,代碼爲「.mapDataGrade」選擇正確運行100%,但「.mapDataSubjects」不是。現在標記對象具有主體的json數組(這是給學生的),並且數組中的每個項都有它的ID。它的這個ID,我應該檢查。

有人可以看到我在做什麼錯嗎?

如果需要包含更多信息,請告訴我。

這是在普通的JavaScript使用gmaps4rails

回答

0

現在標記對象a RoR應用程序具有的受試者JSON數組(這是學生)和陣列中的每個項目具有其ID。它的這個ID,我應該檢查。

_.contains比較了一個值,但它聽起來像你希望你的迭代器將一個值與一個對象的「id」屬性進行比較。爲此,_.some將工作;它就像contains,不同之處在於,不是比較值,你可以寫的比較作爲一個函數:

返回true如果列表中的任何值的通過迭代器真相的考驗。

這裏是你如何使用它:

!_.some(marker.subjects, function(subject) { 
    return subject.id == $('.mapDataSubjects').val(); 
}) 

如果我是正確的,整條生產線應該是這樣的:

return marker.grade != $('.mapDataGrade').val() && 

    // check that none of the subjects is a match 
    !_.some(marker.subjects, function(subject) { 

     // the current subject is a match if its ID matches the selected value 
     return subject.id == $('.mapDataSubjects').val(); 
    });