【问题标题】:Loop through nested json array object and sum values javascript循环遍历嵌套的 json 数组对象和值 javascript
【发布时间】:2016-11-05 23:21:42
【问题描述】:

我想创建一个具有 OrgID、名称和值且具有唯一 OrgID 的新对象。

数据:

{
    "id":0,
    "Value": "12345"
    "Organisations"
    {
        "OrgID": "1",
        "Name": "A"
    }
},
{
    "id":1,
    "Value": "74790"
    "Organisations"
    {
        "OrgID": "1",
        "Name": "A"
    }
},  {
    "id":2,
    "Value": "89668"
    "Organisations"
    {
        "OrgID": "2",
        "Name": "C"
    }
},
{
    "id":3,
    "Value": "23559"
    "Organisations"
    {
        "OrgID": "3",
        "Name": "D"
    }
}

对于下面的示例:id 0 和 1 的总和应该出现,而第 3 和第 4 id 应该是这样。

Final Object = [
{1, A, 94521},
{2, C, 75463},
{3, D, 56743}
];

我尝试使用嵌套的 for 循环和 reduce。但我无法得到我需要的结果。

var result = Array.from(
    data.reduce((organisations, obj) =>
        organisations.set(obj.organisations.Name,
            (organisations.get(obj.organisations.Name) || 0) + +obj.Value),
        new Map()),
    ([organ, sum]) => ({organ,sum})
);

【问题讨论】:

  • 您的 Final Object 数组不包含正确的 JS 对象。
  • 这只是一个例子。但我将拥有一个包含 3 个元素的对象数组
  • 我只是想要一种方法可以向下一层检查 id,然后相应地对值求和。
  • 我认为缺少答案的原因是输入数据和预期输出在任何语言中都完全无效?无论如何 -> jsfiddle.net/evy0keo6
  • OrgID 是关键,我创建了一个对象,因为您发布的作为应该返回的示例的内容完全是废话。

标签: javascript arrays json d3.js


【解决方案1】:

试试这个,是不是想要的结果?

var data = [
  {
    "id":0,
    "Value": "12345",
    "Organisations":
    {
        "OrgID": "1",
        "Name": "A"
    }
},
{
    "id":1,
    "Value": "74790",
    "Organisations":
    {
        "OrgID": "1",
        "Name": "A"
    }
},  {
    "id":2,
    "Value": "89668",
    "Organisations":
    {
        "OrgID": "2",
        "Name": "C"
    }
},
{
    "id":3,
    "Value": "23559",
    "Organisations":
    {
        "OrgID": "3",
        "Name": "D"
    }
}
];

var res = {};

res = Object.keys(data.reduce((res, curr) => {
  res[curr.Organisations.OrgID] = res[curr.Organisations.OrgID] || {
    OrgID: curr.Organisations.OrgID,
    Name: curr.Organisations.Name,
    Value: 0
  };
  res[curr.Organisations.OrgID].Value += parseInt(curr.Value);
  return res;
}, res)).map(key => res[key]);

console.log(res);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多