Как вставить ключ и значение в массив в Jquery


Я читаю RSS-канал и толкая как заголовок, так и ссылку в массив в 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]

такой ...

как я могу получить как плитка и ссылке как пара ( название как ключ и ссылка как значение)

5 68

5 ответов:

в массивах 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 );
});

код

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

самое близкое к кортежу python вместо этого было бы

arr.push([title, link]);

один раз у вас есть ваши объекты или массивы в arr массив вы можете получить значения в виде value.title и value.link или, в случае выдвинутой версии массива, как value[0],value[1].

Я думаю, вам нужно определить объект, а затем нажать в массиве

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

ты не толкал в массив, вы устанавливаете элемент с ключом title стоимостью link. Таким образом, Ваш массив должен быть объектом.

вы можете иметь в виду следующее:

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';

надеюсь, что это помогает :)