是否有一种干净的方式来访问哈希数组中的哈希值?

Jef*_*key 15 ruby

在这段代码中:

arr = [ { id: 1, body: 'foo'}, { id: 2, body: 'bar' }, { id: 3, body: 'foobar' }]
arr.map { |h| h[:id] } # => [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方法从这样的哈希数组中获取值?

Underscore.js有问题,我想知道是否有Ruby等价物.

Ken*_*Y-N 24

如果你不介意猴子修补,你可以去自己:

arr = [{ id: 1, body: 'foo'}, { id: 2, body: 'bar' }, { id: 3, body: 'foobar' }]

class Array
  def pluck(key)
    map { |h| h[key] }
  end
end

arr.pluck(:id)
=> [1, 2, 3]
arr.pluck(:body)
=> ["foo", "bar", "foobar"]
Run Code Online (Sandbox Code Playgroud)

此外,看起来有人已经为Enumerables和其他人推广了这个更通用的解决方案.


kha*_*maa 11

现在导轨支持Array.pluck开箱即用。它已经被这个PR实现了

它实现为:

def pluck(key)
  map { |element| element[key] }
end
Run Code Online (Sandbox Code Playgroud)

所以没有必要再定义它了:)