0

我正在通过基于复选框的 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; 
            }

        }       
    }
4

0 回答 0