Cómo introducir tanto la clave como el valor en un Array en Jquery

Estoy leyendo RSS feed y empujando tanto el Título como el Enlace en un Array en Jquery.

Lo que he hecho 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 vuelvo a leer ese array usando

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

Pero me da Salida como

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

como este ...

¿Cómo puedo obtener tanto tile y link como un par ( título como clave y enlace como valor)

Solución

No hay claves en las matrices de JavaScript. Utiliza objetos para ese fin.

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 el papel de las matrices asociativas. Tenga en cuenta que los objetos no tienen un "orden de clasificación" definido al iterarlas (véase más adelante).

*Sin embargo, en tu caso no me queda claro por qué transfieres los datos del objeto original (data.news). ¿Por qué no pasas simplemente una referencia a ese* objeto?


Puedes combinar objetos y arrays para conseguir una iteración predecible y un 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 );
});
Comentarios (0)

Este código

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

no está haciendo lo que crees que hace. Lo que se envía es un nuevo objeto con un solo miembro llamado "título" y con link como valor... el valor real de title no se utiliza. Para guardar un objeto con dos campos tienes que hacer algo como

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

o con los recientes avances de Javascript puedes usar el atajo

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

Lo más parecido a una tupla en python sería en cambio

arr.push([title, link]);

Una vez que tienes tus objetos o arrays en el array arr puedes obtener los valores como value.title y value.link o, en el caso de la versión del array empujado, como value[0], value[1].

Comentarios (0)
arr[title] = link;

No estás empujando en el array, estás poniendo el elemento con la clave title al valor link. Como tal, su matriz debe ser un objeto.

Comentarios (0)