ruby-on-rails - 从 ruby​​ 中的嵌套哈希数组中搜索键值

标签 ruby-on-rails ruby arrays hash

我有嵌套哈希数组,即

@a = [{"id"=>"5", "head_id"=>nil,
         "children"=>
             [{"id"=>"19", "head_id"=>"5",
                 "children"=>
                     [{"id"=>"21", "head_id"=>"19", "children"=>[]}]},
             {"id"=>"20", "head_id"=>"5",
                 "children"=>
                     [{"id"=>"22", "head_id"=>"20", "children"=>[]}, {"id"=>"23"}]
             }]
     }]

我需要具有键名“id”的所有值的数组。像@b = [5,19,21,20,22,23] 我已经尝试过这个 '@a.find { |h| h['id']}`。 有谁知道如何得到这个?

谢谢。

最佳答案

您可以为 Array 类对象创建新方法。

class Array
  def find_recursive_with arg, options = {}
    map do |e|
      first = e[arg]
      unless e[options[:nested]].blank?
        others = e[options[:nested]].find_recursive_with(arg, :nested => options[:nested])
      end
      [first] + (others || [])
    end.flatten.compact
  end
end

使用这个方法会像

@a.find_recursive_with "id", :nested => "children"

关于ruby-on-rails - 从 ruby​​ 中的嵌套哈希数组中搜索键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27618828/

相关文章:

ruby-on-rails - 通过Ruby on Rails中的联接表选择记录

javascript - 在 Rails 中使用 JQuery 禁用和重新启用表单提交

ruby - 如何将文本文件中的每个数字乘以 10

ruby - 如何在 rake 任务的字符串参数中使用逗号?

python - 如何拆分数组,然后在 0 和第 N 个值之间追加数组,然后在下一组中重复相同的步骤?

ruby-on-rails - Rspec 如何创建一个方法到 "DRY"只有请求的一些参数?

ruby-on-rails - EC2 中的 Ruby 多线程导致奇怪的行为

ruby - ruby中,符号不能被字符串替换?

javascript - 在推送项目之前检查属性值是否存在

java - Java 中的 JSON 数组