Wie man sowohl Schlüssel als auch Wert in ein Array in Jquery schieben

Ich lese RSS-Feed und schiebe sowohl Titel als auch Link in ein Array in Jquery.

Was ich getan habe ist

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

Und ich lese dieses Array wieder mit

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

Aber es gibt mir Ausgabe als

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

wie dieses ...

Wie kann ich Kachel und Link als Paar erhalten (Titel als Schlüssel und Link als Wert)?

Lösung

In JavaScript-Arrays gibt es keine Schlüssel. Verwenden Sie zu diesem Zweck Objekte.

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 erfüllen Objekte die Rolle von assoziativen Arrays. Beachten Sie, dass Objekte keine definierte "Sortierreihenfolge" haben, wenn sie iteriert werden (siehe unten).

*In Ihrem Fall ist mir allerdings nicht ganz klar, warum Sie überhaupt Daten aus dem ursprünglichen Objekt (data.news) übergeben. Warum geben Sie nicht einfach einen Verweis auf das* Objekt weiter?


Sie können Objekte und Arrays kombinieren, um ein vorhersehbares Iterations- und Schlüssel/Wert-Verhalten zu erreichen:

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

Dieser Code

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

tut nicht das, was Sie denken. Was gepusht wird, ist ein neues Objekt mit einem einzigen Member namens "title" und mit link als Wert ... der eigentliche Wert title wird nicht verwendet. Um ein Objekt mit zwei Feldern zu speichern, müssen Sie etwas tun wie

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

oder mit neueren Javascript-Fortschritten können Sie die Abkürzung

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

Das einem Python-Tupel am nächsten kommende wäre stattdessen

arr.push([title, link]);

Sobald Sie Ihre Objekte oder Arrays im arr-Array haben, können Sie die Werte entweder als value.title und value.link oder, im Falle der geschobenen Array-Version, als value[0], value[1] erhalten.

Kommentare (0)
arr[title] = link;

Sie drücken nicht in das Array, Sie setzen das Element mit dem Schlüssel title auf den Wert link. Als solches sollte Ihr Array ein Objekt sein.

Kommentare (0)