首先,请原谅我,如果我没有找到正确的阵列类型,但我似乎无法弄清楚这一点。
我正在尝试在查询中运行此数组:
var myArray = {"artists":[{
"a1":"Adam Sandler",
"a2":"Adam Lambert",
"a3":"Avril Levine",
"a4":"Backstreet Boys",
"a5":"Blackstreet",
"a6":"Black Eye Peas",
"a7":"Cool and the Gang",
"a8":"Chicago",
"a9":"Charlie Manson"
}],
"songs":[{
"s1":"Grow Old With You",
"s2":"Whatdaya Want From Me",
"s3":"Yea yea",
"s4":"Quit Playing Games With My Heart",
"s5":"No Digity",
"s6":"Meet Me Half way",
"s7":"Doo wa ditty",
"s8":"Fight for your honor",
"s9":"Charlies Song"
}],
"genre":[{
"g1":"Pop",
"g2":"Pop",
"g3":"Alternative",
"g4":"R & B",
"g5":"R & B",
"g6":"Hip-Hop",
"g7":"Funk",
"g8":"Soft Rock",
"g9":"Rock"
}]};
当我点击一个按钮(比如说标题)时,我不知道怎么让它自动通过数组。这就是我的按钮:
$.each(myArray.songs, function(e,i){
console.log("e:"+e+" - i:"+i+" - "+myArray.songs[e].i);
});
这确实有效,但是当它到达console.log时,这就是我得到的:
e:0 - i:[object Object] - undefined
我不知道如何让“i”工作,它总是给我[Object Object]。我用数组中的实际id替换I,它可以工作。
谢谢。
答案 0 :(得分:12)
如果您想使用$.each
,可以尝试: -
$.each(myArray.songs, function (i, ob) {
$.each(ob, function (ind, obj) {
console.log("key:" + ind + " value:" + obj);
});
});
答案 1 :(得分:1)
如果您尝试遍历所有歌曲,myArray.songs
是一个包含一个对象的数组。
试试这个:
$.each(myArray.songs[0], function(e, i) {
console.log('e:' + e + ' - i:' + i);
});
并查看此jsFiddle http://jsfiddle.net/TsJP5/1/。
答案 2 :(得分:0)
你的结构有点奇怪 - 歌曲是一个包含你的键 - 值配对的单个json元素的数组。尽管如此,要遍历这些元素,您应该这样做:
var songsElement = myArray.songs[0];
for (var key in songsElement) {
if (songsElement.hasOwnProperty(key)) {
console.log(key + " -> " + songsElement[key]);
}
}
答案 3 :(得分:0)
除非你需要迭代jQuery元素的集合,否则我不会使用$ .each()(这是个人偏好)。相反,利用Array上的原生forEach()方法:
function each(obj, onSuccess, recursive) {
if (obj && (typeof obj === 'object' || typeof obj === 'array')) {
Object.keys(obj).forEach(function(key) {
var val = obj[key];
if (onSuccess && val && key) {
var quit = onSuccess(val, key);
if (false === quit) {
return false;
}
}
if (true === recursive) {
each(val, onSuccess, true);
}
});
}
}
它处理Array和Object实例以及递归。你需要slight performance hit by always using Object.keys()来获取成员名称,但我认为即使在非常大的数据集上它也最终可以忽略不计。
答案 4 :(得分:0)
我不完全确定你的数据意味着什么,但它看起来像一堆歌曲/艺术家/流派组合在一起。如,
[{"song":"Losing My Religion",
"artist":"R.E.M.",
"genre":"alternative"},
{"song":"Bizarre Love Triangle",
"artist":"New Order",
"genre":"electronica"}]
我不确定为什么s1,a1或g1是有用的,所以我将它们排除在外。然后我老实说认为使用jquery对此没有帮助。我会这样做:
for (var i = 0; i < myArray.length; i++)
console.log(myArray[i].song + " by " + myArray[i].artist + " is of the " + myArray[i].genre + " ilk.");