Come spingere sia la chiave che il valore in un array in Jquery

Sto leggendo RSS feed e spingendo sia il titolo che il link in un array in Jquery.

Quello che ho fatto è

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});
                });                      
            });

E sto leggendo di nuovo quell'array usando

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

Ma mi dà Output come

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

come questo ...

Come posso ottenere sia tile che link come coppia (titolo come chiave e link come valore)

Soluzione

Non ci sono chiavi negli array JavaScript. Usate gli oggetti per questo scopo.

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 );
});

In JavaScript, gli oggetti svolgono il ruolo degli array associativi. Siate consapevoli che gli oggetti non hanno un "ordine di ordinamento" definito quando li si itera (vedi sotto).

*Tuttavia, nel tuo caso non mi è molto chiaro perché trasferisci i dati dall'oggetto originale (data.news). Perché non passi semplicemente un riferimento a quell'oggetto*?


Puoi combinare oggetti e array per ottenere un'iterazione prevedibile e un comportamento chiave/valore:

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 );
});
Commentari (0)

Questo codice

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

non sta facendo quello che pensate faccia. Ciò che viene spinto è un nuovo oggetto con un singolo membro chiamato "title" e con link come valore ... il valore effettivo title non viene usato. Per salvare un oggetto con due campi devi fare qualcosa come

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

o con i recenti progressi di Javascript si può usare la scorciatoia

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

La cosa più vicina ad una tupla python sarebbe invece

arr.push([title, link]);

Una volta che avete i vostri oggetti o array nell'array arr potete ottenere i valori sia come value.title e value.link o, nel caso della versione spinta dell'array, come value[0], value[1].

Commentari (0)
arr[title] = link;

Non stai spingendo nell'array, stai impostando l'elemento con la chiave titolo al valore link. Come tale il tuo array dovrebbe essere un oggetto.

Commentari (0)