我可以这样做以从特定键具有特定值的散列数组中获取特定散列。例如,如果我想获得密钥name
为2的哈希值id
,我可以这样做:
array = [{:id => 1, :name => "A"},
{:id => 3, :name => "C"},
{:id => 2, :name => "B"}]
id_2_hash = array.detect {|a| a[:id] == 2}
=> {:id => 2, :name => "B"}
id_2_hash[:name]
=> "B"
我希望像这样对JSON对象做同样的事情:
[
{
'id': 1,
'name': 'A'
},
{
'id': 3,
'name': 'C'
},
{
'id': 2,
'name': 'B'
}
]
如何在Javascript / Jquery中执行此操作?
答案 0 :(得分:1)
使用 []。filter();
/**
* @param {Function} fn is Callback-function
* @param {Object} Object to use as this when executing callback
* @link {forEach}
* @return {Array} Creates a new array with all elements that pass the test implemented by the provided function
* @edition ECMA-262 5th Edition, 15.4.4.20
*/
(function($) {
'use strict';
if(!$.filter) {
$.filter = function(fn, object) {
var length = this.length,
array = [],
i = -1;
while(i++ < length) {
if(i in this && fn.call(object, this[i], i, this)) {
array.push(this[i]);
}
}
return array;
};
}
})(Array.prototype);
答案 1 :(得分:0)
var items = [
{
'id': 1,
'name': 'A'
},
{
'id': 3,
'name': 'C'
},
{
'id': 2,
'name': 'B'
}
];
console.log(items.filter(function(v) {
return v.id == 2;
})[0].name);
更新:请注意,Array#filter无法在IE 8及更低版本上运行
答案 2 :(得分:0)
heare是一个简单的解决方案,但我确信还有更好的解决方案.. 保存到.js文件并运行。 如果您不使用Windows,请删除WScript.Echo以进行测试。 请注意,我不使用过滤器,因为在所有版本的javascript中都不支持。
var obj = [{
'id': 1,
'name': 'A'
},
{
'id': 3,
'name': 'C'
},
{
'id': 2,
'name': 'B'
}
]
for (i=0;i<obj.length;i++){
if (obj[i].id==2){
WScript.Echo(obj[i].name);
}
}