javascript - 组合数组中相似的对象

标签 javascript arrays node.js object

我正在根据一系列订单生成税务报告。本质上我需要转换以下数组:

    [
  {
    "rate": 6.75,
    "code": "US-NC-Guilford-27409",
    "grand": 39.981625,
    "tax": 2.02
  },
  {
    "rate": 7.5,
    "code": "US-NC-Orange-27516",
    "grand": 186.25,
    "tax": 11.25
  },
  {
    "rate": 7.5,
    "code": "US-NC-Orange-27516",
    "grand": 29.19625,
    "tax": 1.5
  }
]

放入每个类“code”的单独数组中,其中类“codes”可以等于任何内容,并且可以具有任意数量的该类型。所以它看起来像这样:

[  
   US-NC-Guilford-27409:[  
      {  
         "rate":6.75,
         "code":"US-NC-Guilford-27409",
         "grand":39.981625,
         "tax":2.02
      }
   ],
   US-NC-Orange-27516:[  
      {  
         "rate":7.5,
         "code":"US-NC-Orange-27516",
         "grand":186.25,
         "tax":11.25
      },
      {  
         "rate":7.5,
         "code":"US-NC-Orange-27516",
         "grand":29.19625,
         "tax":1.5
      }
   ]
]

但我完全愿意接受其他格式化分离数据的方法,但是在生成报告时,我们必须提供每个税级的订单日志。

那么如何使用 JavaScript (Node) 创建该输出?

最佳答案

不需要图书馆,Array.prototype.reduce做的工作:

var data =     [
  {
    "rate": 6.75,
    "code": "US-NC-Guilford-27409",
    "grand": 39.981625,
    "tax": 2.02
  },
  {
    "rate": 7.5,
    "code": "US-NC-Orange-27516",
    "grand": 186.25,
    "tax": 11.25
  },
  {
    "rate": 7.5,
    "code": "US-NC-Orange-27516",
    "grand": 29.19625,
    "tax": 1.5
  }
]

var codes = data.reduce(function(acc, obj) {
    if (!acc.hasOwnProperty(obj.code)) acc[obj.code] = [];
    acc[obj.code].push(obj);
    return acc;
}, {});

document.write(JSON.stringify(codes));

编辑

根据Xotic750的建议,hasOwnProperty测试可以简化为:

var codes = data.reduce(function(acc, obj) {
    if (!acc[obj.code]) acc[obj.code] = [];
    acc[obj.code].push(obj);
    return acc;
}, Object.create(null));

可以进一步压缩为:

var codes = data.reduce(function(acc, obj) {
      return (acc[obj.code] || (acc[obj.code] = [])) && acc[obj.code].push(obj) && acc;
}, Object.create(null));

尽管对于可维护的代码我不建议这样做。如果您喜欢 ES6 箭头函数,那么:

var codes = data.reduce((acc, obj) => (acc[obj.code] || (acc[obj.code] = [])) && acc[obj.code].push(obj) && acc, Object.create(null));

完成了工作,但被严重混淆了。

关于javascript - 组合数组中相似的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34845044/

相关文章:

javascript - 检查 document.location 是否匹配特定模式

c - 通过指针算法迭代结构数组

javascript - node.js 请求 POST 数组 "first argument must be string or buffer"

javascript - 在 Node JS 中访问 JSON 的属性

javascript - javascript选中复选框时如何禁用附加的输入文本框

javascript - HTML5 音频 API - "audio resources unavailable for AudioContext construction"

php - 如何使用php从mysql查询直接创建多维数组?

java - 从数组创建二叉树

node.js - 如何正确处理 IcedCoffeeScript 的错误?

javascript - 如何从 Javascript 中的符号、尾数和指数中获取小数