javascript 中的 for 循环和 if 语句问题
Issue with for loop and if statements in javascript
我正在使用 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。
已编辑
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.
不要用return,用完就停
试试这个,虽然我不知道 gidS。
if(gidS[i][1]=="MT"){
gidS[i]['color']='green';
}
else if(gidS[i][1]=="IRU"){
gidS[i]['color']='#780000';
}
在变量中捕获颜色,例如:color
,而return它在函数的最后:
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;
}
通过遍历对象的每个 属性,然后 returning,您实际上得到了最后可能的匹配 "MT" 或 "IRU",如果有的话.如果您 return 在找到匹配项后立即退出函数,那么您将获得第一个可能的匹配项 "MT" 或 "IRU".
例如,给定集合:[[435,'IRU'],[34324,'MT'],[343,'MT']]
我的方法将 return green
,而您的方法将 return #780000
.
我正在使用 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。
已编辑
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.
不要用return,用完就停
试试这个,虽然我不知道 gidS。
if(gidS[i][1]=="MT"){
gidS[i]['color']='green';
}
else if(gidS[i][1]=="IRU"){
gidS[i]['color']='#780000';
}
在变量中捕获颜色,例如:color
,而return它在函数的最后:
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;
}
通过遍历对象的每个 属性,然后 returning,您实际上得到了最后可能的匹配 "MT" 或 "IRU",如果有的话.如果您 return 在找到匹配项后立即退出函数,那么您将获得第一个可能的匹配项 "MT" 或 "IRU".
例如,给定集合:[[435,'IRU'],[34324,'MT'],[343,'MT']]
我的方法将 return green
,而您的方法将 return #780000
.