我正在通过基于复选框的 Google Maps API 放下标记。我希望地图只显示所有选中复选框的交集的标记。
我有一个函数getCheckedBoxes(chkboxName)
,它将返回一个包含所有选中框的 ID 的数组。
函数show
根据标记是否在其类别属性之一中具有该 ID 来显示标记。
function show(category, type) {
var checkedBoxes = getCheckedBoxes("checkbox");
if (checkedBoxes !== null) {
for (var i=0; i<checkedBoxes.length; i++) {
for (var n=0; n<gmarkers.length; n++) {
if (gmarkers[n][category].toUpperCase().indexOf(checkedBoxes[i].toUpperCase()) !== -1) {
gmarkers[n].setVisible(true);
}
}
}
}
// == check the checkbox ==
document.getElementById(type+" box").checked = true;
}
问题线显然if (gmarkers[i][category].toUpperCase().indexOf(checkedBoxes[i].toUpperCase()) !== -1)
是如果它只满足一次就会导致标记被绘制。我需要类似 Python 的东西来确保每次迭代都必须出现“TRUE”。
有任何想法吗?
Molle 博士建议使用every
,但我似乎想不出它是如何工作的。像这样的东西?
function insideChecked(marker, category) {
var checkedBoxes = getCheckedBoxes("checkbox");
for (var i=0; i<checkedBoxes.length; i++) {
if (marker[category].toUpperCase().indexOf(checkedBoxes[i].toUpperCase()) == -1) {
return false;
}
return true
gmarker.every(insideChecked);
?
我用这个解决了它,但我仍然想知道一个更好的方法来解决这个问题:
function show(category, type) {
var tracker = 0;
var checkedBoxes = getCheckedBoxes("checkbox");
for (var i=0; i<gmarkers.length; i++) {
if (checkedBoxes !== null) {
for (var n=0; n<checkedBoxes.length; n++) {
if (gmarkers[i][category].toUpperCase().indexOf(checkedBoxes[n].toUpperCase()) !== -1) {
//found a match
tracker+=1;
}
}
}
if (tracker == checkedBoxes.length) {
gmarkers[i].setVisible(true);
tracker = 0;
}
else {
gmarkers[i].setVisible(false);
tracker = 0;
}
}
}