将对象数组转换为仅包含值的数组

Convert Array of objects to Array with only values

提问人:shadow777 提问时间:2/10/2021 更新时间:2/10/2021 访问量:644

问:

我有一个对象数组(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),有没有办法从对象推送整个数据,而无需单独指定每个属性?

数组 ruby-on-rails 对象

评论


答:

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 }