【问题标题】:How to merge / combine elements of a JSON array into a new JSON array in NodeJS如何在 NodeJS 中将 JSON 数组的元素合并/组合成一个新的 JSON 数组
【发布时间】:2021-12-30 08:17:06
【问题描述】:

只是想知道这是否可能...我有一个包含 100 个左右对象的 JSON 数组。每个对象都包含这些键值。工作编号、税额、行总计和行总计加税。我需要完成的是使用这些键值创建一个新的 JSON 数组。职位编号、总税额、税项总和、非税项目总和。我只展示了一个工作编号的示例,但会有多个工作编号。

[
   {
      "Job Number":200,
      "Tax Amount":5.00,
      "LineTotal":12,
      "Line Total plus tax":17.00
   },
   {
      "Job Number":200,
      "Tax Amount":2.00,
      "LineTotal":10,
      "Line Total plus tax":12.00
   },
   {
      "Job Number":200,
      "Tax Amount":0.00,
      "LineTotal":8,
      "Line Total plus tax":8
   }
]

我需要能够查看所有匹配的工作编号并将该工作编号的其他键的值相加。另一个转折... 税收项目的总和仅对具有税额的项目的价值求和,而非税项目的总和仅对没有税额的项目的价值求和。所以想要的输出应该是这样的......

[
   {
      "Job Number":200,
      "Total Tax Amount":7.00,
      "Sum of Tax Items":22.00,
      "Sum of non tax items":8
   }
]

我对如何操作数组有基本的了解,但这是我以前没有遇到过的,不确定是否可行。

谢谢

【问题讨论】:

标签: javascript node.js arrays json


【解决方案1】:

您可以使用lodash.js 及其groupBy() 函数。

或者你可以自己滚动。没有比这更复杂的了:

function summarizeByJobNumber( list ) {
  const jobs = new Map();

  for (const item of list) {
    let value = map.get(item['Job Number']);

    if (!value) {

      value = {
        'Job Number': item['Job Number'],
        'Total Tax Amount': 0,
        'Sum of Tax Items': 0,
        'Sum of non tax items': 0,
      };
      map.set(value);

    }

    const isTaxable = item['Tax Amount'] !== 0;

    value[ 'Total Tax Amount'     ] += item['Tax Amount'];
    value[ 'Sum of Tax Items'     ] += isTaxable  ? item['Line Total'] : 0 ;
    value[ 'Sum of non tax items' ] += !isTaxable ? item['Line Total'] : 0 ;

  }

  return Array.from(jobs.values());
}

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 2021-12-25
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多