gpt4 book ai didi

javascript - 使用 lodash 转换集合

转载 作者:行者123 更新时间:2023-11-30 12:07:14 26 4
gpt4 key购买 nike

我有一个给我 Json 数据的查询;例如我有以下 Json

{
"salesInvoices":

[
{
"id": "1",
"salesInvoiceLines":
[
{
"ItemCode": "Apple",
"UnitCode": "piece",
"Quantity": "10"
},
{
"ItemCode": "Orange",
"UnitCode": "box",
"Quantity": "2"
}
]
},
{
"id": "2",
"salesInvoiceLines":
[
{
"ItemCode": "Apple",
"UnitCode": "piece",
"Quantity": "20"
},
{
"ItemCode": "Orange",
"UnitCode": "piece",
"Quantity": "21"
},
{
"ItemCode": "Orange",
"UnitCode": "box",
"Quantity": "1"
}
]
}
]

}

我想按项目单位对将数据分组为以下格式:

[
{ item : 'Apple', unit : 'piece', totalQuantity : 30 },
{ item : 'Orange', unit : 'piece', totalQuantity : 21 },
{ item : 'Orange', unit : 'box', totalQuantity : 3 }
]

我厌倦了使用 lodash 库的以下代码,但它不起作用

   var sumQuantity = function(total, item){
return total + item.Quantity
}

var transformList = function(line){
return _.map(line.SalesInvoiceLines, function(invoice){
return _.map(invoice, function(line){
return {
item: line.ItemCode,
unit: line.UnitCode,
totalQuantity: _.reduce(line.Quantity, sumQuantity, 0)
}
})
});
};

var groupedList = _.groupBy(data.d.results, function(line) {
return line.ItemCode + line.UnitCode;
});

var list = _.chain(groupedList)
.map(transformList)
.flatten()
.value();

如何得到上述结果?

最佳答案

很抱歉,我无法为您提供具体的工作示例。据我所见,您的代码中存在以下概念性错误:

  1. 我猜最初的 groupBy 语句是错误的。假设 data.d.results 与您发布的示例 JSON 相同,那么您无法在那里访问 line.ItemCode + line.UnitCode;。相反,您只会获得 salesInvoices 的一次迭代。

  2. 你有一层你不需要的 _.map 调用:

    返回 _.map(line.SalesInvoiceLines, function(invoice){
    返回 _.map(发票,函数(行){

=> 发票已经是发票。遍历发票的属性没有意义(将它们称为 line 也没有意义)。

  1. 像在 totalQuantity: _.reduce(line.Quantity, sumQuantity, 0) 中那样使用 _.reduce() 是没有意义的,因为 line.Quantity 已经是一个原始数字。你不能“减少”它。

我的建议是:

  1. 正确进行基本转换并尝试将所有发票提取到平面数组中
  2. 然后你可以 _.reduce() 这个数组到一个中间对象,键包含“line.ItemCode + line.UnitCode”,指向你最终想要的形式的对象,例如{ item : 'Apple', unit : 'piece', totalQuantity : 30 } .在每次减少迭代时,您只需确定此“唯一键”,测试该对象是否已存在,如果不存在则使用 totalQuantity = 1 创建它,否则您只需增加 totalQuantity。
  3. 最后,对第 2 步的中间结果调用 _.values()。

关于javascript - 使用 lodash 转换集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34837919/

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