Як вставити як ключ, так і значення в масив у Jquery


88

Я читаю RSS-канал і натискаю як Title, так і Link у масив у Jquery .

Те, що я зробив, це

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

І я знову читаю цей масив, використовуючи

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

Але це дає мені вихід як

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

подобається це ...

Як я можу отримати як плитку, так і посилання як пару ( заголовок як ключ і посилання як значення )

Відповіді:


188

У масивах JavaScript немає ключів. Використовуйте для цього предмети.

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

У JavaScript об'єкти виконують роль асоціативних масивів. Пам’ятайте, що об’єкти не мають визначеного «порядку сортування» під час їх ітерації (див. Нижче).

Однак у вашому випадку мені не зовсім зрозуміло, чому ви взагалі передаєте дані з вихідного об'єкта ( data.news). Чому ви просто не передаєте посилання на цей об'єкт навколо?


Ви можете комбінувати об’єкти та масиви для досягнення передбачуваної ітерації та поведінки ключ / значення:

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

Цей код

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

не робить те, що, на вашу думку, робить. Підштовхується новий об'єкт з одним членом з іменем "title" і linkяк значення ... фактичне titleзначення не використовується. Щоб зберегти об’єкт із двома полями, потрібно зробити щось на зразок

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

або з останніми досягненнями Javascript ви можете використовувати ярлик

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

Натомість найближчим до кортежу пітона було б

arr.push([title, link]);

Якщо у вас є свої об'єкти або масиви в arrмасиві можна отримати значення або як value.titleі , value.linkабо, в разі рухомої версії масиву, так як value[0], value[1].


17
arr[title] = link;

Ви не натискаєте на масив, ви встановлюєте елемент ключем titleдо значення link. Таким чином, ваш масив повинен бути об'єктом.



2

Ви можете мати на увазі це:

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

Ви можете встановити число для такого об’єкта, як: ({})[0] = 'txt';і ви можете встановити ключ для масиву, як:([])['myKey'] = 'myVal';

Сподіваюся, це допомагає :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.