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。

有人可以看到我做错了什么吗?

如果需要包含更多信息,请告诉我。

这是在使用 gmaps4rails 的 RoR 应用程序上的纯 JavaScript 上

4

1 回答 1

0

现在标记对象有一个主题的 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();
    });
于 2012-12-18T19:58:53.930 回答