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 )

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

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].


19

Saya pikir Anda perlu menentukan objek dan kemudian mendorong dalam array

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

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.


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 :)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.