簡體   English   中英

Javascript ES6-在對象上進行映射以生成新數組會丟失對象中元素的順序

[英]Javascript ES6 - mapping over object to produce a new array loses order of elements in object

我有一個包含團隊列表的JSON對象,每個團隊都有一個teamCrimeCategorySum ,它是鍵值對的對象,其中每個鍵是犯罪類別,每個值是該類別中的犯罪總數。 它按字母順序排列,看起來像這樣...

alcohol:0
animal abuse:0
animal cruelty:0
animal neglect:0
assault:7
attempted murder:0
battery:1

我正在遍歷它以獲得像這樣的值的數組...

teamList.map(team => {
  const newArray = Object.keys(team['teamCrimeCategorySum']).map(key => {
    return team['teamCrimeCategorySum'][key]
  })
})

這將產生一個原始訂單丟失的數組。 上面的對象正在產生這個...

[18, 6, 1, 1, 7, 2, 3, ...]

我想保留順序,以便上述對象應改為產生...

[0, 0, 0, 0, 7, 0, 1, ...]

您可以使用以下代碼生成一個數組,該數組保留對象的原始順序

  const newArray = [];
  for ( let key in tempList) {
         if(tempList.hasOwnProperty(key)) {
                newArray.push(tempList[key]);
         }
  }

還是仍然要使用Object.keys和Array.map,請先對鍵進行排序,然后按如下所示調用map

  Object.keys(tempList).sort().map(...)

@rlemon有正確的想法。 當我在控制台中檢查對象時,它是按字母順序記錄的,但是對象屬性不是按字母順序存儲的。 通過在.map()之前調用.sort() ,我可以建立然后保留我想要的字母順序。 該功能現在看起來像這樣...

  teamList.map(team => {
    const newArray = Object.keys(team['teamCrimeCategorySum'])
      .sort()
      .map(key => {
        return team['teamCrimeCategorySum'][key]
      })
    return [`${team.name}`, ...newArray, '']
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM