无法按JavaScript对象中的列表项分组 [英] Could not group by list item in javascript object
本文介绍了无法按JavaScript对象中的列表项分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个如下所示的javascript对象,我正在尝试按项目分组.
I have a javascript object as below and i am trying to group by item.
rfinOu=[
{ "pid": 34, "ava": 30 },
{ "pid": 45, "ava": 30 },
{ "pid": 32, "ava": 60 }
]
尝试:
var res = {};
var avapro= d3.nest()
.key(function (d) { return d.ava; })
.rollup(function (v) { return v.length })
//rollup(function (v) { return { count: v.length, pid: d3.sum(v, function (d) { return d.pid; }) }; })
.entries(rfinOu);
res = JSON.stringify(avapro);
我想按以下项目分组后输出.但我无法..请帮助.
I would like have output after grouped by items like below. but i am not able to..please help.
finOu=[
{ "ava": 30, "count":2, "Pids":{"pid":34,"pid":45}},
{ "ava": 60, "count":1, "Pids":{"pid":32}}
]
推荐答案
还有另一种选择.
var out = rfinOu.reduce(function (p, c) {
var key = c.ava;
p[key] = p[key] || { count: 0, pids: [] };
p[key].count++;
p[key].pids.push(c.pid);
return p;
}, {});
这将为您提供一个具有 ava
键的对象:
This will get you an object with ava
keys:
{
"30": { "count": 2, "pids": [ 34, 45 ] },
"60": { "count": 1, "pids": [ 32 ] },
}
要将其放入示例中的对象数组中,只需遍历对象键即可.
To get that into an array of objects like the one in your example, just loop over the object keys.
var arr = Object.keys(out).map(function(el) {
return {
ava: el, count: out[el].count,
pids: out[el].pids
}
});
要获得以下输出:
[
{ "ava": "30", "count": 2, "pids": [ 34, 45 ] },
{ "ava": "60", "count": 1, "pids": [ 32 ] },
]
这篇关于无法按JavaScript对象中的列表项分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文