【问题标题】:Finding my object inside JSON by its ID通过 ID 在 JSON 中查找我的对象
【发布时间】:2013-06-22 23:18:48
【问题描述】:
[
    {"ID":"5","Name":"Jay"},
    {"ID":"30","Name":"Sharon"},
    {"ID":"32","Name":"Paul"}
]

所以我有这种 JSON。

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

  • 30 会产生 => "Sharon"
  • 5 会产生 => "Jay"

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

【问题讨论】:

标签: javascript jquery json


【解决方案1】:

迭代数组并检查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"}

FIDDLE

或在较新的浏览器中:

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

FIDDLE

【讨论】:

  • 您可以从 if 语句中返回以避免检查数组的其余部分
  • @bfavaretto - 似乎是个好主意,只需返回分配即可。
【解决方案2】:

试试linear search

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

        break;
    }
}

【讨论】:

    【解决方案3】:

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

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

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

    var target = byId["30"];
    

    【讨论】:

      【解决方案4】:

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

      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"];
          }
      }
      

      【讨论】:

        【解决方案5】:

        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'; });
        

        FIDDLE

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-10
          • 2020-02-29
          相关资源
          最近更新 更多