Ruby如何从对象数组中提取ID等指定属性值组成新数组
正确实现方式
纯Ruby环境写法
直接遍历数组中的每个哈希对象,提取对应的id键的值即可,运行结果和你预期完全一致:
id_array = iban_obj.map { |item| item['id'] }
Rails 或 Ruby 2.7+ 环境简化写法
可以直接用pluck方法批量提取指定键的值,写法更简洁:
id_array = iban_obj.pluck('id')
如果需要过滤掉数组中不存在id键的元素返回的nil值,可以在后面追加compact方法:
# 纯Ruby环境 id_array = iban_obj.map { |item| item['id'] }.compact # Rails/Ruby2.7+环境 id_array = iban_obj.pluck('id').compact
原有写法错误说明
你之前尝试的两种写法都不符合需求,原因如下:
iban_obj.map{ |id| id }:块内的参数id实际是遍历到的每个完整哈希对象,直接返回该参数相当于返回所有原对象,最终得到的还是原数组,没有提取id字段值iban_obj.select(&:id):select方法的作用是筛选符合条件的元素,不会修改返回元素的结构;另外你的数组元素是哈希类型,不存在id实例方法,&:id的写法还会触发方法不存在的报错。
内容的提问来源于stack exchange,提问作者user16741832
相关产品推荐
相关产品推荐

