![](/img/trans.png)
[英]In an array of hash how to delete an element with particular value for a key in ruby?
[英]How I can delete key and value in array of hash?
我需要删除 hash 数组中的所有键 created_at 和 updated_at 。 我的哈希看起来像:
assessment_with_desc = {
"id": 1,
"name": "First assessment",
"created_at": "2020-03-14T20:13:27.006Z",
"updated_at": "2020-03-14T20:13:27.006Z",
"description_with_child_models": [
{
"id": 3,
"title": "First category",
"created_at": "2020-02-20T15:32:46.379Z",
"updated_at": "2020-03-14T20:16:11.530Z",
"accessment_id": 1,
"sub_categories": [
{
"id": 1,
"title": "First sub_category",
"category_id": 3,
"created_at": "2020-02-20T15:40:49.793Z",
"updated_at": "2020-02-20T15:40:49.793Z",
"stages": [
{
"id": 5,
"title": "First stage",
"sub_category_id": 1,
"created_at": "2020-02-20T15:44:10.603Z",
"updated_at": "2020-02-20T15:44:10.603Z"
}
]
}
]
}
]
}
我做到了,但它只在这种情况下有效assessment_with_desc.delete('created_at')
和assessment_with_desc.delete('updated_at')
:
assessment_with_desc.delete('created_at')
assessment_with_desc.delete('updated_at')
assessment_with_desc['description_with_child_models'].delete('created_at')
assessment_with_desc['description_with_child_models'].delete('updated_at')
assessment_with_desc['description_with_child_models'][0]['sub_categories'].delete('created_at')
assessment_with_desc['description_with_child_models'][0]['sub_categories'].delete('updated_at')
assessment_with_desc['description_with_child_models'][0]['sub_categories'][0]['stages'].delete('created_at')
assessment_with_desc['description_with_child_models'][0]['sub_categories'][0]['stages'].delete('updated_at')
如果键等于:created_at
或:updated_at
您可以递归调用函数来删除键/值:
def recursively_delete_timestamps(object)
object.transform_values do |value|
next value unless value.is_a?(Array)
value.map do |inner_hash|
recursively_delete_timestamps(inner_hash)
end
end.reject do |key, _|
key.in?(%i[created_at updated_at])
end
end
recursively_delete_timestamps(assessment_with_desc)
# {:id=>1,
# :name=>"First assessment",
# :description_with_child_models=>
# [{:id=>3,
# :title=>"First category",
# :accessment_id=>1,
# :sub_categories=>
# [{:id=>1,
# :title=>"First sub_category",
# :category_id=>3,
# :stages=>[{:id=>5, :title=>"First stage", :sub_category_id=>1}]}]}]}
请注意,哈希值保持不变。 也不是transform_values
, map
或reject
修改原始对象,而是返回一个新对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.