在javascript中使用for循环和if语句的问题

时间:2015-03-29 00:18:12

标签: javascript openlayers

我正在使用Javascript和Openlayers库来为地图上的矢量要素设置样式。 我写了以下脚本:

var gidS = response[Object.keys(response)[Object.keys(response).length - 1]] // get the data from json obj
// ADD STYLING - DIFFERENT COLORS FOR WHAT IS COMPLETE  
var styleContext = {
        getColor: function (feature) {
            var objectKeys = Object.keys(gidS); // use objectkeys to loop over all the object properties //use it to get the length
            for (var i = 0; i < objectKeys.length; i++){
                    //alert(i);

                   //////////////////
                   if(gidS[i][1]=="MT"){
                        //alert(gidS[i][1]);
                        return "green"; 
                    }
                    else if(gidS[i][1]=="IRU"){
                        alert(gidS[i][1]);
                        return "#780000"; //no images on this line
                    }
                    /////////////////////// 
            }
        }
};

如果我在没有if条件的情况下(在斜杠之间)运行脚本,那么我会根据gidS的最大长度得到正确的i增量值。 但是当我由于某种原因包含if语句时,变量i不会增加。它仍为0。

EDITED

getColor函数稍后会像这样执行

// define Style
                var defaultStyle = new OpenLayers.Style({
                    fillColor: "${getColor}",
                    fillOpacity:"1",
                    strokeColor: "${getColor}",
                    strokeOpacity: "1",
                    strokeWidth: 8,
                    cursor: "pointer",
                    pointRadius: 8

                }, {
                    context: styleContext
                });

我在这里做错了什么? 非常感谢。 d。

2 个答案:

答案 0 :(得分:1)

捕获变量中的颜色,例如:color,并在函数末尾返回它:

getColor: function (feature) {
    var color = '';
    var objectKeys = Object.keys(gidS); // use objectkeys to loop over all the object properties //use it to get the length
    for (var i = 0; i < objectKeys.length; i++){
        if(gidS[i][1]=="MT"){
            color = "green"; 
        }
        else if(gidS[i][1]=="IRU"){
            color = "#780000"; //no images on this line
        }
    }
    return color;
}

通过循环遍历对象的每个属性,然后返回,您可以有效地获得最后可能匹配的“MT”或“IRU”,如果有的话。如果您在找到匹配项后立即退出该功能,那么您将获得第一个匹配的“MT”或“IRU”。

例如,给定设置:[[435,'IRU'],[34324,'MT'],[343,'MT']]我的方法将返回green,您的方法将返回#780000

答案 1 :(得分:-1)

不使用退货,使用后立即停止。

试试这个,我不知道gidS。

if(gidS[i][1]=="MT"){
   gidS[i]['color']='green';                     
}
else if(gidS[i][1]=="IRU"){
   gidS[i]['color']='#780000';                       
}