在这里遇到一些麻烦。
我有一个充满对象的数组。这是我的输入
[
{ 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)
}
有人可以帮助我达到期望的输出吗?
答案 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