我目前正在调用一个服务,该服务将响应作为具有名称值对的对象数组发送。下面是一个例子。任何顺序都可以有任意数量的这些名称值对,但我只想访问名称" name2"的值。除了循环遍历每个对象并检查名称以获取name2的相应值之外,是否有一种有效的方法?
[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}]
所以从上面的数据集中我想要一种有效的方法来搜索name2并得到相应的值" value2"。
由于
答案 0 :(得分:2)
如果您不想手动迭代数组,可以使用lambda表达式,如下所示
a =[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}] ;
//get the items that match your criteria
a.filter(item=>item.name=="name2")
//get those items' values
a.filter(item=>item.name=="name2").map(item=>item.value)
//get the first value (if you know that it's only one item that will match)
a.filter(item=>item.name=="name2").map(item=>item.value)[0]
答案 1 :(得分:1)
您可以使用Array#find
方法。
var arr = [{
"name": "name1",
"value": "value1"
}, {
"name": "name2",
"value": "value2"
}];
// get the object containing name as `name2`
var obj = arr.find(function(v) {
return v.name === 'name2';
});
// get value property if object is defined
var res = obj && obj.value;
console.log(res)

答案 2 :(得分:1)
除非您知道名称为name2
no。
您需要进行迭代,直到找到该名称,然后才能摆脱困境。
e.g。
var jsonData = [{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}];
for(var i=0;i<jsonData.length;i++){
if(jsonData[i]['name'] == 'name2'){
console.log('The value is: ' + jsonData[i]['value']);
break;
}
}
请注意,如果您不需要支持Internet Explorer,则可以使用Array.find()方法来简化此操作。