簡體   English   中英

數組 map 並跳過未定義的動態 object 屬性

[英]Array map and skip undefined dynamic object properties

試圖弄清楚如何在“地圖”function 中創建動態 object。 映射基於大型 json object,我正在嘗試找到一種減小最終數組大小的方法。 理想情況下不要添加具有未定義值的屬性。 即,如果'offst: undefined',則跳過此屬性,但添加其他具有適當int 值的屬性。 是否可以在不再次遍歷數組的情況下做這樣的事情? 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;

示例 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]合並到您要返回的 object 中。 然后它只會合並存在的屬性。

 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