Cara mendorong kunci dan nilai ke dalam Array di Jquery

89

Saya membaca RSS feed dan mendorong Judul dan Tautan ke dalam Array di Jquery .

Apa yang saya lakukan adalah

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

Dan saya membaca array itu lagi menggunakan

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

Tapi itu Memberi saya Output sebagai

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

seperti ini ...

Bagaimana saya bisa mendapatkan ubin dan tautan sebagai pasangan ( judul sebagai kunci dan tautan sebagai nilai )

KillerFish
sumber

Jawaban:

188

Tidak ada kunci dalam array JavaScript. Gunakan benda untuk tujuan itu.

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

Dalam JavaScript, objek memenuhi peran array asosiatif. Ketahuilah bahwa objek tidak memiliki "urutan urutan" yang ditentukan saat mengulanginya (lihat di bawah).

Namun , dalam kasus Anda, tidak terlalu jelas bagi saya mengapa Anda mentransfer data dari objek asli ( data.news) sama sekali. Mengapa Anda tidak hanya lulus referensi ke yang objek di sekitar?


Anda dapat menggabungkan objek dan larik untuk mencapai iterasi yang dapat diprediksi dan perilaku kunci / nilai:

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 );
});
Tomalak
sumber
30

Kode ini

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

tidak melakukan apa yang Anda pikirkan. Apa yang didorong adalah objek baru dengan satu anggota bernama "judul" dan linksebagai nilai ... nilai sebenarnya titletidak digunakan. Untuk menyimpan objek dengan dua bidang, Anda harus melakukan sesuatu seperti

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

atau dengan kemajuan Javascript terkini, Anda dapat menggunakan pintasan

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

Hal yang paling dekat dengan tuple python sebagai gantinya

arr.push([title, link]);

Setelah Anda memiliki objek atau array dalam arrarray yang Anda bisa mendapatkan nilai baik sebagai value.titledan value.linkatau, dalam kasus versi array mendorong, seperti value[0], value[1].

6502
sumber
19

Saya pikir Anda perlu menentukan objek dan kemudian mendorong dalam array

var obj = {};
obj[name] = val;
ary.push(obj);
Jaydeep Patel
sumber
17
arr[title] = link;

Anda tidak mendorong ke dalam larik, Anda menyetel elemen dengan kunci titleke nilainya link. Dengan demikian, array Anda harus berupa objek.

menipu
sumber
2

Anda mungkin bermaksud seperti ini:

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['        ']);

Anda dapat mengatur enumerable untuk Objek seperti: ({})[0] = 'txt';dan Anda dapat mengatur kunci untuk Array seperti:([])['myKey'] = 'myVal';

Semoga ini membantu :)

Cody
sumber