arrays - 将对象数组转换为只有值的数组
问题描述
我有一个对象数组(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),有没有办法从对象中推送整个数据而无需单独指定每个属性?
解决方案
用于.attributes
获取模型上所有属性的哈希。调用.values
它来获取没有键的值。
使用您的代码:
obj_table = []
obj_values.each do |ext|
ext.each do |obj|
obj_table.push(obj.attributes.values.join(","))
end
end
虽然有更好的方法。我建议你看看.map
and .flat_map
。
obj_table = obj_values.flat_map do |ext|
ext.map do |obj|
obj.attributes.values.join(",")
end
end
推荐阅读
- vb.net - 从表单中动态删除控件
- api - Sheets API Glitch 将数字舍入到 15 个有效数字 (Gspread)
- python - 如何从 message.content 中删除字符?
- html - 来自 2 个不同来源的视频替代品
- lua - 如何获得与另一个号码匹配的号码
- wso2 - 如何使用 Analytics 版本 3.2.0 配置 WSO2 API Manager 版本 4.0.0?
- reactjs - 使用效果未按预期调用
- html - 原子中的未知属性“网格模板列”
- javascript - 有条件地显示/隐藏项目
- r - 为什么 `print.function` 不同意用 `substitute()` 创建的函数体?