数组映射并跳过未定义的动态对象属性

卡米尔

试图弄清楚如何在“地图”功能中创建动态对象。映射基于大型json对象,我正在尝试找到一种减小最终数组大小的方法。理想情况下,不要添加具有未定义值的属性。即如果'offst:undefined',则跳过此属性,但添加其他具有正确int值的属性。是否可以做这样的事情而无需再次遍历数组?数组有超过15万个条目,因此性能下降将是巨大的。

this.mapData = this.mapData
                .map((e) => ({
                    p: e.p,
                    lat: e.lat,
                    lng: e.lng,
                    y: Object.keys(e.values)[0],
                    ct: Object.values(e.values)[0].ct, // add ct: only if not undefined
                    cp: Object.values(e.values)[0].cp,
                    w: Object.values(e.values)[0].wp,
                    offst: Object.values(e.values)[0].offst,
                    onst: Object.values(e.values)[0].onst,
                    ertn: Object.values(e.values)[0].ertn,
                    ertl: Object.values(e.values)[0].ertl,
                    dst: Object.values(e.values)[0].dst,
                    ft: Object.values(e.values)[0].ft,
                }))
                .filter((item) => item.chargersTotal !== 0);

            return this.mapData;

示例json数据:

[
   {
      "p":"BA1 2RU",
      "lat":"51.38934",
      "lng":"-2.364467",
      "values":{
         "2019":{
            "ct":0.0
            "dst":5.0
            "onst":1.0
         }
      }
   },
   {
      "p":"BA10 0AA",
      "lat":"51.112275",
      "lng":"-2.453865",
      "values":{
         "2019":{
            "offst":1.0,
            "ct":1.0
         }
      }
   },
   {
      "p":"BA10 0AB",
      "lat":"51.112463",
      "lng":"-2.454067",
      "values":{
         "2019":{
            "ct":0.0
         }
      }
   }
]
巴尔玛

使用省略号合并Object.values(e.values)[0]到您要返回的对象中。然后,它将仅合并存在的属性。

this.mapData = this.mapData
  .map((e) => {
    let firstKey = Object.keys(e.values)[0];
    let firstVal = e.values[firstKey];
    return {
      p: e.p,
      lat: e.lat,
      lng: e.lng,
      y: firstKey,
      ...firstVal
    };
  })
  .filter((item) => item.chargersTotal !== 0);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章