Tengo una cadena json que es el resultado de una llamada ajax que se ve así
[ {
"name":"sourabh",
"userid":"soruabhbajaj",
"id":"11",
"has_profile_image":"0" },
{
"name":"sourabh",
"userid":"sourabhbajaj",
"id":"12",
"has_profile_image":"0"
}]
La página de mi aplicación web utiliza el valor "id" como identificación de un objeto. Por lo tanto, quiero mostrar el nombre del usuario donde sea necesario. ¿Cuál es la forma más rápida de obtener el objeto de usuario correcto para generar el nombre u otros valores del usuario utilizando el valor de identificación? Gracias por adelantado.
4 respuestas
Ok ... esta respuesta proporciona muchos gastos generales al inicio, pero luego agiliza la referencia por id más adelante. Básicamente crea una matriz que tiene cada elemento en el mismo índice de su ID. Como dije, muchos gastos generales al principio pero poco para el procesamiento posterior
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"
Busca en la matriz cada vez
function getUser(users, id) {
var user = null;
$.each(users, function() {
if (this.id === id) {
user = this;
return false; // break out of loop
}
});
return user
}
O cree una tabla de búsqueda reutilizable (asume identificadores de usuario únicos):
function toLookup(users) {
var lookup = {};
$.each(users, function() {
lookup[this.id] = this;
});
return lookup;
}
function getUser(lookup, id) {
return lookup[id] || null;
}
Haga el resultado de una llamada ajax de esta manera:
{ "11": {
"name":"sourabh",
"userid":"soruabhbajaj",
"id":"11",
"has_profile_image":"0" },
"12": {
"name":"sourabh",
"userid":"sourabhbajaj",
"id":"12",
"has_profile_image":"0"
}}
De esta manera puedes usarlo desde javascript de esta manera:
userName = jsonResponse[id].name
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);
Es muy simple :)
Preguntas relacionadas
Preguntas vinculadas
Nuevas preguntas
javascript
Para preguntas sobre la programación en ECMAScript (JavaScript / JS) y sus diversos dialectos / implementaciones (excepto ActionScript). Incluya todas las etiquetas relevantes en su pregunta; por ejemplo, [node.js], [jquery], [json], etc.