提问人:shadow777 提问时间:2/10/2021 更新时间:2/10/2021 访问量:644
将对象数组转换为仅包含值的数组
Convert Array of objects to Array with only values
问:
我有一个对象数组(obj_values)
[
#<User id: 1, name: "Kostas">,
#<User id: 2, name: "Moufa">,
...
]
我想把它转换成一个只有上面对象的值的数组,所以它看起来像:
[
1, Kostas
2, Moufa
]
我可以这样做:
obj_table = []
obj_values.each do |ext|
ext.each do |obj|
obj_table.push([obj.id, obj.name].join(","))
end
end
但是,使用这种方法,我需要明确指定要推送的属性(obj.id 和 obj.name),有没有办法从对象推送整个数据,而无需单独指定每个属性?
答:
0赞
Siim Liiser
2/10/2021
#1
用于获取模型上所有属性的哈希值。调用它以仅获取没有键的值。.attributes
.values
使用您的代码:
obj_table = []
obj_values.each do |ext|
ext.each do |obj|
obj_table.push(obj.attributes.values.join(","))
end
end
虽然有更好的方法。我建议你看看和..map
.flat_map
obj_table = obj_values.flat_map do |ext|
ext.map do |obj|
obj.attributes.values.join(",")
end
end
0赞
Prashant Bangar
2/10/2021
#2
是的,您可以推送数据,而无需单独指定。要推送数据,您必须使用 An 对象将是您的活动记录对象。attributes 将返回包含该对象所有属性的哈希值。
因此,您可以将循环更改为单个语句,例如:object.attributes.values
obj_values.flat_map {|object_value| object_value.attributes.values }
下一个:修复 SQL 中无效的 json
评论