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.

0
Sourabh 23 sep. 2011 a las 18:37

4 respuestas

La mejor respuesta

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"
1
Joseph Marikle 23 sep. 2011 a las 15:21

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;
}
0
Greg 23 sep. 2011 a las 15:06

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
0
Mircea Soaica 23 sep. 2011 a las 14:42
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 :)

0
Joseph Marikle 23 sep. 2011 a las 14:45