For循环覆盖对象

时间:2018-11-27 22:45:55

标签: javascript node.js

在这里遇到一些麻烦。

我有一个充满对象的数组。这是我的输入

[
 { id: 1, colour: 'blue', count: 10 },
 { id: 1, colour: 'red', count: 12 },
 { id: 2, colour: 'red', count': 8 },
 { id: 2, colour: 'blue', count: 3 }
]

我的目标是让数组中遍历的每个对象根据ID进行解析,并以更友好的格式(对我而言)交付。 它应该像这样

{"id":1, "colour_count":{"blue":10,"red":12}}
{"id":2, "colour_count":{"blue":8,"red":3}}

以此类推,当我获得更多ID时。

这是我当前的代码。在这种情况下,数组为i。我的问题是我忽略了数据对象。

let data = {
   colour_count: {}
}

for( var i=0; i<row.length; i++) {
   (function(i) { 
      data["colour_count"][row[i].colour] = row[i].count
      data["id"] = row[i].id      
   })(i)
}

有人可以帮助我达到期望的输出吗?

2 个答案:

答案 0 :(得分:4)

您可以分为两个部分来完成此操作。首先,根据ID创建一个哈希,这样很容易查找和设置:

const hash = rows.reduce((result, { id, colour, count }) => {
  if(!result[id]){
    result[id] = {
      id,
      colour_count: {}
    }
  }
  result[id].colour_count[colour] = count
  return result
}, {})

然后将值映射到数组

const arr = Object.values(hash)

工作源:

const rows = [
 { id: 1, colour: 'blue', count: 10 },
 { id: 1, colour: 'red', count: 12 },
 { id: 2, colour: 'red', count: 8 },
 { id: 2, colour: 'blue', count: 3 }
]

const hash = rows.reduce((result, { id, colour, count }) => {
  if(!result[id]){
    result[id] = {
      id,
      colour_count: {}
    }
  }
  result[id].colour_count[colour] = count
  return result
}, {})

const arr = Object.values(hash)
console.log(arr)

答案 1 :(得分:1)

您可以使用Array.reduce进行创建分组并计算总数,然后使用["https://www.googleapis.com/discovery/v1/apis/people/v1/rest"]获得所需的输出:

Object.values