简体   繁体   English

数组 map 并跳过未定义的动态 object 属性

[英]Array map and skip undefined dynamic object properties

Trying to figure out how to create dynamic object in 'map' function.试图弄清楚如何在“地图”function 中创建动态 object。 Mapping is based on large json object and I am trying to find a way to reduce final array size.映射基于大型 json object,我正在尝试找到一种减小最终数组大小的方法。 Ideally to not add properties that have undefined values.理想情况下不要添加具有未定义值的属性。 Ie if 'offst: undefined', then skip this property but add other that have proper int value.即,如果'offst: undefined',则跳过此属性,但添加其他具有适当int 值的属性。 Is it possible to do something like this without looping through array again?是否可以在不再次遍历数组的情况下做这样的事情? Array has over 150k entries so performance hit would be significant. Array 有超过 150k 个条目,因此性能损失会很大。

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;

Exmaple json data:示例 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
         }
      }
   }
]

Use ellipsis to merge Object.values(e.values)[0] into the object you're returning.使用省略号将Object.values(e.values)[0]合并到您要返回的 object 中。 Then it will only merge in the properties that exist.然后它只会合并存在的属性。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM