首页 > 解决方案 > 将对象数组转换为只有值的数组

问题描述

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

标签: arraysruby-on-railsobject

解决方案


用于.attributes获取模型上所有属性的哈希。调用.values它来获取没有键的值。

使用您的代码:

obj_table = []
obj_values.each do |ext|
  ext.each do |obj|
    obj_table.push(obj.attributes.values.join(","))
  end
end

虽然有更好的方法。我建议你看看.mapand .flat_map

obj_table = obj_values.flat_map do |ext|
  ext.map do |obj|
    obj.attributes.values.join(",")
  end
end

推荐阅读