【问题标题】:Group data based on property javascript基于属性javascript的分组数据
【发布时间】:2017-09-30 15:33:19
【问题描述】:

我有json数组如下,

{
      "lstMonths": [
        "September"
      ],
      "lstBalances": [
        {
          "AccountName": "john",
          "AccountBalanceOnMonth": [
            {
              "MonthName": "September",
              "Amount": "-28.11"
            }
          ]
        },
        {
          "AccountName": "sanga\n",
          "AccountBalanceOnMonth": [
            {
              "MonthName": "September",
              "Amount": "100"
            }
          ]
        },
        {
          "AccountName": "mahela",
          "AccountBalanceOnMonth": [
            {
              "MonthName": "September",
              "Amount": "400"
            }
          ]
        },
        {
          "AccountName": "sachin",
          "AccountBalanceOnMonth": [
            {
              "MonthName": "September",
              "Amount": "600"
            }
          ]
        },
        {
          "AccountName": "dhoni",
          "AccountBalanceOnMonth": [
            {
              "MonthName": "September",
              "Amount": "-500"
            }
          ]
        }
      ]
    }

我想按 AccountName 分组并将输出形成为,

  { data: [28.11], label: 'john' },
  { data: [100], label: 'sanga' },
  { data: [400], label: 'mahela' },
  { data: [400], label: 'sachin' }
  { data: [400], label: 'dhoni' }

如果有两个月,那么上面说十月

  { data: [28.11,3], label: 'john' },
  { data: [100,4], label: 'sanga' },
  { data: [400,4], label: 'mahela' },
  { data: [400,4], label: 'sachin' }
  { data: [400,5], label: 'dhoni' }

我尝试像上面那样分组。有帮助吗?

这是我的代码:

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};
console.log(groupBy(response.lstMonths, 'length'));

请提供一种找到最佳价值的方法。

编辑

json 更多个月,

{ "lstMonths": [ “九月”],“lstBalances”:[ { "帐户名": "约翰\n", “AccountBalanceOnMonth”:[ { "月名": "九月", “金额”:“-28.11” }, { "月名": "八月", “金额”:“-28.11” } ] }, { "AccountName": "sanga\n", “AccountBalanceOnMonth”:[ { "月名": "九月", “金额”:“100” }, { "月名": "八月", “金额”:“233” } ] }, { "账户名": "mahela", “AccountBalanceOnMonth”:[ { "月名": "九月", “金额”:“400” }, { "月名": "八月", “金额”:“32” } ] } ] }

【问题讨论】:

  • 更多月份,请提供数据示例。
  • data 属性是如何生成的?请解释并重新检查这些值。
  • @NinaScholz 添加了 json
  • @ibrahimmahrir 数据是从金额中生成的,实际上这些是虚拟值。我只是想从金额中获取它

标签: javascript angular typescript


【解决方案1】:

假设,

  • 只有一个数组有数据,
  • 每个月都是一个值,
  • 所有月份都已排序
  • 结果月份应该有相同的排序,

然后您可以获取包含帐户的数组并迭代帐户以为每个帐户构建一个新对象并获取数据数组的余额值。

var data = [{ lstMonths: ["September"], lstBalances: [{ AccountName: "john", AccountBalanceOnMonth: [{ MonthName: "September", Amount: "-28.11" }, { MonthName: "August", Amount: "-28.11" }] }, { AccountName: "sanga", AccountBalanceOnMonth: [{ MonthName: "September", Amount: "100" }, { MonthName: "August", Amount: "233" }] }, { AccountName: "mahela", AccountBalanceOnMonth: [{ MonthName: "September", Amount: "400" }, { MonthName: "August", Amount: "32" }] }] }],
    grouped = data[0].lstBalances.map(function (o) {
        return {
            data: o.AccountBalanceOnMonth.map(function (p) { return +p.Amount; }),
            label: o.AccountName
        };
    });
    
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多