Упростите аналогичный Object Literal в javascript коде - PullRequest
0 голосов
/ 16 марта 2020

Есть ли способ упростить этот код, я ценю любые идеи. в 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 +"'"

    }
  } );

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Вы можете создать функцию, которая будет генерировать слои и 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])
  )
);
0 голосов
/ 16 марта 2020

Это зависит от того, что именно вы подразумеваете под упрощением. Я предполагаю, что вы не хотите повторять строку "Site_id = '" + activeSiteId + "'" одиннадцать раз. Если это все, то это должно сделать:

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
});
...