json - 使用公共属性加入 JSON
问题描述
我有一个带有代码、名称和数量的产品项目的 JSON。有时物品是重复的(相同的代码和名称,不同的数量)。我想把它们的数量加起来。
前任:
从
{ items: [{ code: 1, name: 'A', quantity: 2.0 }, { code: 1, name: 'A', quantity: 3.0 }, { code: 2, name: 'B', quantity: 4.0 }] }
到
{ items: [{ code: 1, name: 'A', quantity: 5.0 }, { code: 2, name: 'B', quantity: 4.0 }] }
解决方案
这应该有效:
items_hash = { items: [{ code: 1, name: 'A', quantity: 2.0 }, { code: 1, name: 'A', quantity: 3.0 }, { code: 2, name: 'B', quantity: 4.0 }] }
items_hash[:items] = items_hash[:items].each_with_object([]) do |item, collected_items|
if item_in_collected_items = collected_items.find { |i| i[:code] == item[:code] }
item_in_collected_items[:quantity] += item[:quantity]
else
collected_items << item
end
end
p items_hash
#=> { items: [{ code: 1, name: 'A', quantity: 5.0 }, { code: 2, name: 'B', quantity: 4.0 }] }
推荐阅读
- c# - Asp.Net Core 3(Blazor 客户端)的构建失败
- react-native - 如何突出显示平面列表中的项目并显示删除选项以在长按该项目时从列表中删除该项目?
- android - 如何创建android服务来检查用户是否打开另一个应用程序
- javascript - 为变量分配新值会从内存中清除旧值?
- javascript - 数据表中的舍入列页脚
- git - 恢复已删除的有一些更改的 git 文件
- c++ - 排序比较器,专业化
- sql - 如果行存在于另一个表中,如何更新 (SQL)
- visual-studio - Visual Studio 2017 ASP.NET Core 应用程序仅显示框架版本
- neo4j - 如何在 NEO4J 中有效地存储每个节点的时间序列值?