Как вставить ключ и значение в массив в 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 ответов:
в массивах 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';
надеюсь, что это помогает :)