Javascript ES6 - 在对象上映射以生成新数组会丢失对象中元素的顺序

时间:2017-03-04 00:24:38

标签: javascript reactjs ecmascript-6

我有一个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, ...]

2 个答案:

答案 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(...)

答案 1 :(得分:0)

@rlemon有正确的想法。当我在控制台中检查对象时,它按字母顺序记录,但对象属性未按字母顺序存储。通过调用.sort(),在.map()之前,我能够建立并保留我原定的字母顺序。该功能现在看起来像这样......

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