切换语句 Java 脚本



尝试为各种多边形分配颜色。我不确定我是否正确执行此操作。我使用的是 if else 语句,但一位同事建议使用 switch 语句。我无法让下面的代码工作。

我是javascript的新手,但我想尝试在传单上制作地图。我开始遵循此处的教程:maptimeboston.github.io/leaflet-intro。我一直在订阅我自己的数据。我发现当我使用 else if 语句(例如在教程中(时,所有多边形都被分配了第一个分配的颜色

$.getJSON("SA_Access.geojson", function(accesspolys) {
L.geoJson(accesspolys, {
style: function(feature) {
var fillColor,
servicelayer = feature.properties.POLYID;
switch (servicelayer) {
case '10987':
fillColor = "#006837";
break;
case '10988':
fillcolor = "#31a354";
break;
default:
fillColor = "#FFFFFF"
}
}
onEachFeature: function(feature, layer) {
layer.bindPopup("<strong>" + feature.properties.POLYNAME)
}
}).addTo(map);
});

最初我的代码如下所示:

$.getJSON("SA_Access.geojson",function(accesspolys){
L.geoJson( accesspolys, {
style: function(feature){
var fillColor,
servicelayer = feature.properties.POLYID;
if (servicelayer = '10987' ) fillColor = "#006837";
else if ( servicelayer = '10988' ) fillColor = "#31a354";
else if ( servicelayer = '10989' ) fillColor = "#78c679";
else if ( servicelayer = '10990' ) fillColor = "#c2e699";
else if ( servicelayer = '10991' ) fillColor = "#800000";
else if ( servicelayer = '10992' ) fillColor = "#FFFF00";
else if ( servicelayer = '10993' ) fillColor = "#00FF00";
else if ( servicelayer = '10994' ) fillColor = "#808000";
else if ( servicelayer = '10995' ) fillColor = "#ff6347";
else if ( servicelayer = '10996' ) fillColor = "#ee82ee";
else if ( servicelayer = '10997' ) fillColor = "#6a5acd";
else if ( servicelayer = '10998' ) fillColor = "#ffa500";
else if ( servicelayer = '10999' ) fillColor = "#3cb371";
else if ( servicelayer = '11100' ) fillColor = "#87554A";
else if ( servicelayer = '11101' ) fillColor = "#685ab3";
else if ( servicelayer = '11102' ) fillColor = "#2b42d9";
else if ( servicelayer = '11103' ) fillColor = "#d92bb4";
else if ( servicelayer = '11152' ) fillColor = "#982880";
else if ( servicelayer = '11153' ) fillColor = "#459828";
else if ( servicelayer = '11154' ) fillColor = "#288398";
else if ( servicelayer = '11155' ) fillColor = "#982891";
else if ( servicelayer = '11156' ) fillColor = "#284e98";
else if ( servicelayer = '11157' ) fillColor = "#982860";
else if ( servicelayer = '11158' ) fillColor = "#989428";
else if ( servicelayer = '11159' ) fillColor = "#362898";
else fillColor = "#f7f7f7";  // no data
return { color: "#999", weight: 1, fillColor: fillColor, fillOpacity: .6 };
},
onEachFeature: function( feature, layer ){
layer.bindPopup( "<strong>" + feature.properties.POLYNAME)
}
}).addTo(map);
});

只需制作一个函数可以查找的地图即可。如果没有命中,它就会变得undefined,因此您可以使用||来生成默认值。

const colorMap = {
10987: '#006837', 
10988: '#31a354', 
10989: '#78c679', 
// etc
};
function getColor(serviceLayer) {
return colorMap[serviceLayer] || '#f7f7f7';
}

getColor(999);
// => '#f7f7f7'
getColor(10988);
// => '#31a354'

假设您正在获取一个值,并在这种情况下输出不同的值,您最好使用某种键值字典模式。

最简单的实现是使用多维数组,例如

var items = [
[10987, "#31a354"],
[10989, "#78c679"],
[10990, "#c2e699"]
];

然后编写一个简单的函数来匹配元素 0 中的值(即 10987(并返回元素 1(即"#31a354"(

function getValue(dict, key)
for(var i = 0; i < dict.length; i++)
if(dict[i][0] == key){
return dict[i][1];
}
}
return "somedefaultvalue";
}

更结构化的方法可能是组装一个 json 对象,如下所示:

var items = [
{"key": 10987, "value": "#31a354"},
{"key": 10989, "value": "#78c679"},
{"key": 10990, "value": "#c2e699"},
];

当然,这看起来很相似,但是当您迭代而不是仅将元素称为item[0][1]时,阅读效果更好,您将拥有item[0].key。

function getValue(dict, key)
for(var i = 0; i < dict.length; i++)
if(dict[i].key == key){
return dict[i].value;
}
}
return "somedefaultvalue";
}

在这两种情况下,您都会像这样调用 getValue,我假设"键"是一种整数数据类型 - 如果需要,它可以很容易地转换为字符串或任何类型。

var fillColor = getValue(items, 10987);

**抱歉,写了所有这些徒手,所以可能会涉及一些整理。希望对您有所帮助!

编辑:如果您想扩展应用程序以从外部文件或某种服务中读取值,JSON 方法非常有用,这在这种情况下是一种非常正常的做法。

最新更新