我有一系列哈希:
ary = [{1=>"January", 2=>"February", 3=>"March"}, {11=>"Oct", 12=>"Nov", 13=>"Dec"}]
如何根据密钥从特定哈希中获取值?我想做点什么:
ary[1].select{|h| h[13]}
使用键"Dec"
从第二个哈希值中获取值13
。上面的语句返回整个第二个哈希值,这不是要求:
{11=>"Oct", 12=>"Nov", 13=>"Dec"}
答案 0 :(得分:1)
select语句将返回带有键13的所有哈希值。
如果你已经知道哪个哈希有密钥,那么下面的代码将给你答案。
let test = ['empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.png',
'empty_250x380@3x.jpg',
'empty_250x380@3x.png','empty_250x380@3x.png']
function check(arr) {
return Array.isArray(arr) && arr.every(i=>['.jpg','.png'].indexOf(i.slice(-4))!== - 1)
}
console.log(check(test))
但是,如果您不确定数组中的哪个哈希值具有该值,则可以执行以下操作:
ary[1][13]
值将具有来自具有键13的所有哈希值的键13的值。
答案 1 :(得分:0)
您可以将两个哈希合并为一个,然后查询合并哈希的键。
c = a.merge(b)
=> {1=>"January", 2=>"February", 3=>"March", 11=>"Oct", 12=>"Nov", 13=>"Dec"}
然后你可以这样做:
c[1]
=> "January"
否则,如果你想将格式保存为不同哈希的数组,你可以通过这种方式得到你想要的值:
ary[1][12]
=> "Nov"
但是这样你必须总是知道数组中的哪个哈希是你想要的元素,这看起来有点令人困惑,因为你可以使用不同的哈希而不是哈希数组,并且必须记住每个哈希的位置。阵列。
答案 2 :(得分:0)
先做一个hash,然后key返回hash的值。
使用合并元素从数组中生成单个散列。
方法一
hash = ary.reduce({}, :merge)
方法二
hash = ary.inject(:merge)
然后按键返回值。
hash[13]