gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:40:54 24 4
gpt4 key购买 nike

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

    [
{
"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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com