如何在 Jquery 中将键和值同时推入 Array

我正在阅读 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]

像这样..。

我怎样才能同时得到 瓷砖链接作为一对(标题作为键,链接作为值)

632109 次浏览

There are no keys in JavaScript arrays. Use objects for that purpose.

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

In JavaScript, objects fulfill the role of associative arrays. Be aware that objects do not have a defined "sort order" when iterating them (see below).

However, In your case it is not really clear to me why you transfer data from the original object (data.news) at all. Why do you not simply pass a reference to that object around?


You can combine objects and arrays to achieve predictable iteration and key/value behavior:

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 );
});
arr[title] = link;

You're not pushing into the array, you're setting the element with the key title to the value link. As such your array should be an object.

This code

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

is not doing what you think it does. What gets pushed is a new object with a single member named "title" and with link as the value ... the actual title value is not used. To save an object with two fields you have to do something like

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

or with recent Javascript advances you can use the shortcut

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

If instead you want the key of the object to be the content of the variable title you can use

arr.push({[title]: link}); // Note that title has been wrapped in brackets

You might mean this:

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

You can set an enumerable for an Object like: ({})[0] = 'txt'; and you can set a key for an Array like: ([])['myKey'] = 'myVal';

Hope this helps :)

I think you need to define an object and then push in array

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