2011-01-28 15 views
58

estoy leyendo RSS y empujando tanto título y Link en una matriz en Jquery.cómo empujar tanto clave y el valor en una matriz en Jquery

lo que hice es

var arr = []; 

      $.getJSON("displayjson.php",function(data){ 
       $.each(data.news, function(i,news){ 
        var title = news.title; 
        var link = news.link; 
        arr.push({title : link}); 
       });      
      }); 

Y estoy leyendo esa matriz de nuevo utilizando

$('#show').click(function(){ 
       $.each(arr, function(index, value){ 
        alert(index +' : '+value); 
       }); 
      }); 

Pero mi Realizar salida como

1:[Object Object] 
2:[Object Object] 
3:[Object Object] 

así ...

Cómo yo puede conseguir tanto baldosas y enlace como un par (título como clave y el enlace como valor)

Respuesta

124

No hay claves en las matrices de JavaScript. Usa objetos para ese propósito.

var obj = {}; 

$.getJSON("displayjson.php",function (data) { 
    $.each(data.news, function (i, news) { 
     obj[news.title] = news.link; 
    });      
}); 

// later: 
$.each(obj, function (index, value) { 
    alert(index + ' : ' + value); 
}); 

En JavaScript, los objetos cumplen la función de matrices asociativas. Tenga en cuenta que los objetos no tienen un "orden de clasificación" definido al iterarlos (ver a continuación).

Sin embargo,, en su caso no es muy claro para mí por qué transfiere datos del objeto original (data.news) en absoluto. ¿Por qué no simplemente pasa una referencia al que contiene el objeto?


Se pueden combinar objetos y matrices para lograr iteración predecible y comportamiento clave/valor:

var arr = []; 

$.getJSON("displayjson.php",function (data) { 
    $.each(data.news, function (i, news) { 
     arr.push({ 
      title: news.title, 
      link: news.link 
     }); 
    });      
}); 

// later: 
$.each(arr, function (index, value) { 
    alert(value.title + ' : ' + value.link); 
}); 
8
arr[title] = link; 

No estás empujando en la matriz, se está configurando el elemento con la clave title con el valor link. Como tal, tu matriz debería ser un objeto.

20

Este código

var title = news.title; 
var link = news.link; 
arr.push({title : link}); 

no está haciendo lo que usted cree. Lo que se empuja es un nuevo objeto con un único miembro llamado "título" y con link como el valor ... el valor real title no se utiliza. Para guardar un objeto con dos campos que hay que hacer algo como

arr.push({title:title, link:link}); 

o con la reciente Javascript avanza puede utilizar el acceso directo

arr.push({title, link}); // Note: comma "," and not colon ":" 

Lo más parecido a una tupla pitón podría ser en cambio

arr.push([title, link]); 

Una vez que tenga sus objetos o matrices en la matriz arr, puede obtener los valores como value.title y value.link o, en el caso de la versión de matriz empujada, como value[0], value[1].

2

Se podría significar esto:

var unEnumeratedArray = []; 
var wtfObject = { 
       key : 'val', 
       0  : (undefined = 'Look, I\'m defined'), 
       'new' : 'keyword', 
       '{!}' : 'use bracket syntax', 
       '  ': '8 spaces' 
       }; 

for(var key in wtfObject){ 
    unEnumeratedArray[key] = wtfObject[key]; 
} 
console.log('HAS KEYS PER VALUE NOW:', unEnumeratedArray, unEnumeratedArray[0], 
      unEnumeratedArray.key, unEnumeratedArray['new'], 
      unEnumeratedArray['{!}'], unEnumeratedArray['  ']); 

Se puede establecer una numerable de un objeto como: ({})[0] = 'txt'; y se puede establecer una clave para una matriz como: ([])['myKey'] = 'myVal';

espero que esto ayude :)

11

Creo que necesita definir un objeto y luego insertarlo en el conjunto

var obj = {}; 
obj[name] = val; 
ary.push(obj); 
Cuestiones relacionadas