Js用钥匙搜索对象

时间:2011-09-23 14:37:56

标签: javascript jquery json

我有一个json字符串,它是由ajax调用产生的,看起来像这个

[ { 
"name":"sourabh", 
"userid":"soruabhbajaj", 
"id":"11", 
"has_profile_image":"0" }, 
{
"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"12", 
"has_profile_image":"0" 
}]

我的网络应用程序页面使用“id”值作为对象的标识。所以我想显示需要用户名的用户名。获取正确的用户对象以使用id值输出用户名或其他值的最快方法是什么。提前致谢。

4 个答案:

答案 0 :(得分:1)

好的......这个答案在开始时提供了很多开销,但是后来通过id引用它会更快。它基本上使一个数组的每个项目都与其id的索引相同。就像我说的那样,起初有很多开销但很少用于以后的处理

var data = [{"name":"sourabh", 
"userid":"soruabhbajaj", 
"id":"11", 
"has_profile_image":"0" }, 
{"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"12", 
"has_profile_image":"0" }, 
{"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"27", 
"has_profile_image":"0" }, 
{"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"3", 
"has_profile_image":"0" }, 
{"name":"myname", 
"userid":"myuserid", 
"id":"5", 
"has_profile_image":"0" }, 
{"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"2", 
"has_profile_image":"0" }]

arr = [];

data.sort(function(a,b){return Number(a.id) - Number(b.id);})

var k = 0;
var offset = Number(data[0].id);
for(var i = offset; i <= Number(data[data.length - 1].id);i++)
  if(Number(data[k].id) === i)
    arr.push(data[k++]);
  else
    arr.push({})

//now you can reference like so:
alert(arr[5 - offset].name) // alerts "myname"

答案 1 :(得分:0)

从这样的ajax调用中得到结果:

{ "11": { 
"name":"sourabh", 
"userid":"soruabhbajaj", 
"id":"11", 
"has_profile_image":"0" }, 
"12": {
"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"12", 
"has_profile_image":"0" 
}}

这样你就可以在javascript中使用它:

userName = jsonResponse[id].name

答案 2 :(得分:0)

每次都搜索数组

function getUser(users, id) {
  var user = null;
  $.each(users, function() {
    if (this.id === id) {
      user = this;
      return false; // break out of loop
    }
  });
  return user
}

或创建可重用的查找表(假定唯一的用户ID):

function toLookup(users) {
  var lookup = {};
  $.each(users, function() {
    lookup[this.id] = this;
  });
  return lookup;
}

function getUser(lookup, id) {
  return lookup[id] || null;
}

答案 3 :(得分:0)

var data = [{"name":"sourabh", 
"userid":"soruabhbajaj", 
"id":"11", 
"has_profile_image":"0" }, 
{"name":"sourabh", 
"userid":"sourabhbajaj", 
"id":"12", 
"has_profile_image":"0" }]

for(var i in data)
  if(data[i]["id"] == 11)
    alert(data[i].name);

这很简单:)