我有一个json字符串,它是由ajax调用产生的,看起来像这个
[ {
"name":"sourabh",
"userid":"soruabhbajaj",
"id":"11",
"has_profile_image":"0" },
{
"name":"sourabh",
"userid":"sourabhbajaj",
"id":"12",
"has_profile_image":"0"
}]
我的网络应用程序页面使用“id”值作为对象的标识。所以我想显示需要用户名的用户名。获取正确的用户对象以使用id值输出用户名或其他值的最快方法是什么。提前致谢。
答案 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);
这很简单:)