Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简化javascript代码中类似的对象文字_Javascript_Leaflet_Esri - Fatal编程技术网

简化javascript代码中类似的对象文字

简化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

是否有任何方法可以简化此代码,我非常感谢您的任何想法。 在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_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+“”