2
[
    {"ID":"5","Name":"Jay"},
    {"ID":"30","Name":"Sharon"},
    {"ID":"32","Name":"Paul"}
]

所以我有这种JSON。

我需要轻松地提供所需键的值。例如:

  • 30 会产生 => “莎朗”
  • 5 会产生 => "Jay"

等等。这样做的正确方法是什么?

4

5 回答 5

5

迭代数组并检查 ID 是否匹配

function getById(id) {
    var O = null;
    for (var i=0; i<arr.length; i++) {
        if ( arr[i].ID == id ) return O = arr[i];
    }
    return O;
}

getById('30'); // returns {"ID":"30","Name":"Sharon"}

小提琴

或在较新的浏览器中:

function getById(arr, id) {
   return arr.filter(function(o) { return o.ID == id });
}

小提琴

于 2013-06-26T00:10:32.257 回答
3

尝试线性搜索

var searchId = "30";
for(var i = 0; i < json.length; i++)
{
    if(json[i].ID == searchId)
    {
        // Found it.
        //

        break;
    }
}
于 2013-06-26T00:08:44.763 回答
2

如果 ID 是唯一的,并且您需要经常这样做,那么您可能希望将您的集合转换为以 ID 为键的键/值对。

var byId = data.reduce(function(res, obj) {
    res[obj.ID] = obj;
    return res
}, {});

现在您可以简单地使用 ID 来查找对象。

var target = byId["30"];
于 2013-06-26T00:11:37.657 回答
1

你可能只需要写一些东西来循环它。

var data = [ {"ID":"5","Name":"Jay"},{"ID":"30","Name":"Sharon"}, {"ID":"32","Name":"Paul"} ];
for(var i in data){
    if(data[i]["ID"] == 30){
      return data[i]["Name"];
    }
}
于 2013-06-26T00:14:16.490 回答
0

undersocre.js可以通过一行代码找到集合中的对象

参考: http ://underscorejs.org/#find

代码:

var people = [
    {"ID":"5","Name":"Jay"},
    {"ID":"30","Name":"Sharon"},
    {"ID":"32","Name":"Paul"}
];

_.find(people, function(person) { return person.ID === '5'; });

小提琴

于 2013-06-26T00:51:22.027 回答