ruby-on-rails - 哈希数组推入另一个数组
问题描述
我有一个包含哈希的数组,我想从哈希中过滤几个参数并将过滤后的数据插入另一个数组,但下面是我使用的示例数据
a = Array.new
a = [
{"name"=>"hello", "age"=>"12", "sex"=> "M", "city"=>"Chennai"},
{"name"=>"name2", "age"=>"26", "sex"=> "M", "city"=>"Banglore"}
]
line_item = Array.new
hash_data = {}
a.each do |datas|
hash_data[:name] = datas["name"]
hash_data[:age] = datas["age"]
line_item << hash_data
end
我得到这个结果:
[
{:name=>"name2", :age=>"26"},
{:name=>"name2", :age=>"26"}
]
但我期待这个:
[
{:name=>"hello", :age=>"12"},
{:name=>"name2", :age=>"26"}
]
有人请帮助解决这个问题,在此先感谢
解决方案
在循环外定义散列意味着您不断添加相同的散列对象(同时覆盖其先前的值)。相反,在循环中创建一个新的哈希:
line_items = []
a.each do |datas|
hash_data = {}
hash_data[:name] = datas["name"]
hash_data[:age] = datas["age"]
line_items << hash_data
end
代码看起来有点单调。让我们重构它。
我们可以在散列文字中设置键:
line_items = []
a.each do |datas|
hash_data = { name: datas["name"], age: datas["age"] }
line_items << hash_data
end
我们可以去掉这个hash_data
变量:
line_items = []
a.each do |datas|
line_items << { name: datas["name"], age: datas["age"] }
end
我们可以使用map
直接转换数组:
line_items = a.map { |h| { name: h["name"], age: h["age"] } }
#=> [{:name=>"hello", :age=>"12"}, {:name=>"name2", :age=>"26"}]
推荐阅读
- java - JPA - 当参数是属性的成员时选择,属性是一组字符串
- objective-c - Objective-C中的条形图?
- java - 通过 Spring 将数据从 Java 传递到 html
- python - REST 框架编写自定义字段验证
- python - 通过创建发送和 Python 使用对 Campaign Monitor 的 API 调用获取订阅者
- javascript - 从控制器动态添加类
- python - 将对象属性分组到 Marshmallow 模式中的新字典中
- javascript - 如何在鼠标悬停时显示按钮?
- hyperledger-fabric - composer playground 默认添加参与者
- html - 如何在提交后禁用整个 redux 表单,然后在清除所有字段后重新启用它