简化javascript代码中类似的对象文字
是否有任何方法可以简化此代码,我非常感谢您的任何想法。 在lyerDefs中,从1到11的所有对象的值都相同简化javascript代码中类似的对象文字,javascript,leaflet,esri,Javascript,Leaflet,Esri,是否有任何方法可以简化此代码,我非常感谢您的任何想法。 在lyerDefs中,从1到11的所有对象的值都相同 spider = L.esri.dynamicMapLayer({ url:API, layers:[1,2,3,4,5,6,7,8,9,10,11], layerDefs:{ // how to simplify following code? 1: "Site_id ='"+ activeSiteId +"'", 2: "Site
spider = L.esri.dynamicMapLayer({
url:API,
layers:[1,2,3,4,5,6,7,8,9,10,11],
layerDefs:{ // how to simplify following code?
1: "Site_id ='"+ activeSiteId +"'",
2: "Site_id ='" + activeSiteId +"'",
3: "Site_id ='"+ activeSiteId +"'",
4: "Site_id ='"+ activeSiteId +"'",
5: "Site_id ='"+ activeSiteId +"'",
6: "Site_id ='"+ activeSiteId +"'",
7: "Site_id ='"+ activeSiteId +"'",
8: "Site_id ='"+ activeSiteId +"'",
9: "Site_id ='"+ activeSiteId +"'",
10: "Site_id ='"+ activeSiteId +"'",
11: "Site_id ='"+ activeSiteId +"'"
}
} );
这取决于你简化它的确切意思。我假设您不想将“Site_id='”+activeSiteId+“'”字符串重复11次。如果仅此而已,那么这应该可以:
var layers = [];
var layerDefs = {};
for(i = 1; i < 12; i++) {
layers.push(i);
layerDefs[i] = "Site_id = '" + activeSiteId + "'";
}
spider = L.esri.dynamicMapLayer({
url:API,
layers: layers,
layerDefs: layerDefs
});
var层=[];
var layerDefs={};
对于(i=1;i<12;i++){
推送(i);
layerDefs[i]=“站点id=”+activeSiteId+“”;
}
spider=L.esri.DynamicPlayer({
url:API,
层:层,
layerDefs:layerDefs
});
您可以创建一个生成图层和图层的函数。下面的示例使用.reduce
方法
function generateLayersAndDefs(layers) {
return {
layers: layers,
layerDefs: layers.reduce(function(final, current) {
final[current] = "Site_id ='" + current + "'"
return final;
}, {})
};
}
spider = L.esri.dynamicMapLayer(
Object.assign(
{
url:API
},
generateLayersAndDefs([1,2,3,4,5,6,7,8,9,10,11])
)
);
这其中更广泛的背景是什么?因为您可以使用一个循环来生成它,但是如果我们知道为什么会出现这种情况,就可以完全消除重复的需要。
layerDefs:generateDefs(11/*假设*/)
,那么它只涉及“generateDefs”函数中的内容。如前所述,在这种情况下,一个简单的循环就足够了。。虽然数据重复的程度感觉不太好。是的,这解决了重复“Site_id=”+activeSiteId+“”