从嵌套哈希中删除所有类似的键

oka*_*56k 2 ruby ruby-on-rails

给定这样的哈希:

{
  id: 1,
  name: "test",
  children: [
    { id: 1, name: "kid 1" },
    { id: 2, name: "kid 2" }
  ]
}
Run Code Online (Sandbox Code Playgroud)

如何递归删除所有 id密钥?

Sch*_*ern 5

您可以编写一个函数来递归地遍历哈希和数组。

def delete_recursively(thing, key_to_delete)
  case thing
  when Hash
    # Delete the key
    thing.delete(key_to_delete)

    # Recurse into each remaining hash value.
    thing.each_value do |value|
      delete_recursively(value, key_to_delete)
    end
  when Array
    # Recurse into each value of the array.
    thing.each do |value|
      delete_recursively(value, key_to_delete)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

可以根据需要扩展为包括其他数据类型。