无法按JavaScript对象中的列表项分组 [英] Could not group by list item in javascript object

查看:23
本文介绍了无法按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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆