在 rails 中使用 find 方法创建数组

creating an array using find method in rails

input = {"color"=>["red"],"size"=>["s","l"]}

json_obj = [{"color":"red","id":"123","size":"s","name":"test"},
            {"color":"yellow","id":"124","size":"s","name":"test"},
            {"color":"red","id":"125","size":"l","name":"test"}]

输出应该是

output["red_s"] = {"color":"red","id":"123","size":"s","name":"test"}
output["red_l"] = {"color":"red","id":"125","size":"l","name":"test"}

输出是输入和在 json_obj 上查找的组合。 如何获得 rails 中的输出?

我有以下脚本来获取 ie.red_s 和 red_l、

的组合
ary = input.map {|k,v| [k].product v}
output = ary.shift.product(*ary).map {|a| Hash[a]}

output[red_s]=json_obj.find{|h| h["color"] == "red" and h["size"] == "S"}

我不想在代码中有任何硬编码,如上面的颜色和大小。

我认为这应该能让您接近您想要的结果。 请注意 json 数组对象周围的 "ticks"(您所拥有的无效 ruby) 另一个问题是您必须找到一种更好的方法来创建输出哈希键。

require 'json'
input = {"color"=>["red"],"size"=>["s","l"]}
output = {}

json_obj = '[{"color":"red","id":"123","size":"s","name":"test"},
            {"color":"yellow","id":"124","size":"s","name":"test"},
            {"color":"red","id":"125","size":"l","name":"test"}]'

found = JSON.parse json_obj
input.each_key do |key|
  found = found.select { |item| input[key].include?(item[key]) }
end
puts found

found.each do |item|
  output_key = ""
  input.each_key do |key|
    output_key = "#{item[key]}_" + output_key
  end
  output["#{output_key}"] = item.to_json
end


puts output