在Javascript中从JSON数组中查找名称值对的有效方法

时间:2017-12-12 13:33:08

标签: javascript arrays json

我目前正在调用一个服务,该服务将响应作为具有名称值对的对象数组发送。下面是一个例子。任何顺序都可以有任意数量的这些名称值对,但我只想访问名称" name2"的值。除了循环遍历每个对象并检查名称以获取name2的相应值之外,是否有一种有效的方法?

[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}] 

所以从上面的数据集中我想要一种有效的方法来搜索name2并得到相应的值" value2"。

由于

3 个答案:

答案 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()方法来简化此操作。