首页 > 解决方案 > 使用公共属性加入 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 }] }

标签: jsonruby

解决方案


这应该有效:

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 }] }

推荐阅读