我有以下json数组:
var champions = [{
"1":{
"name":"Aatrox",
"role1":"Top",
"role2":"Jungle"},
"2":{
"name":"Ahri",
"role1":"Middle"},
"3":{"
name":"Akali",
"role1":"Middle",
"role2":"Top"
}
}];
我尝试使用我发现的代码片段遍历此数组:
$(document).ready(function(){
var x = 1;
for(var i = 0; i < champions.length; i++) {
console.log(champions[i][x].name);
x++;
}
});
但它只给了我&#34; Aatrox&#34;并且当champions.length
为1时停止
如何在数组中循环显示所有名称?
答案 0 :(得分:5)
假设您不希望更改数据结构,可以迭代数组,然后迭代其中每个对象的属性(然后访问名称):
var champions = [{
"1":{
"name":"Aatrox",
"role1":"Top",
"role2":"Jungle"},
"2":{
"name":"Ahri",
"role1":"Middle"},
"3":{
"name":"Akali",
"role1":"Middle",
"role2":"Top"
}
}];
$(document).ready(function(){
for(var i = 0; i < champions.length; i++) {
for (var prop in champions[i]){
console.log(champions[i][prop].name);
}
}
});
JSFiddle: http://jsfiddle.net/TrueBlueAussie/234yspw1/
注意:返回的顺序是未定义的,因此您不应指望它。
JSFiddle: http://jsfiddle.net/TrueBlueAussie/234yspw1/1/
如果订单 重要,则需要将数据重组为数组。
答案 1 :(得分:3)
编辑:工作JS小提琴:https://jsfiddle.net/3ms8s9jr/
var champions = [{
"1":{
"name":"Aatrox",
"role1":"Top",
"role2":"Jungle"},
"2":{
"name":"Ahri",
"role1":"Middle"},
"3":{"
name":"Akali",
"role1":"Middle",
"role2":"Top"
}
}];
需要:
var champions = [
{
"name":"Aatrox",
"role1":"Top",
"role2":"Jungle"
},
{
"name":"Ahri",
"role1":"Middle"
},
{
"name":"Akali",
"role1":"Middle",
"role2":"Top"
}
];
你需要为每个冠军拥有一个对象,现在你将它们全部存储在一个大对象中,这样你就不能轻易地遍历它(相反,它实际上很难做到这一点)
理想情况下,您希望以易于使用的格式获取数据,因此,如果需要将数据转换为数组,则可能是最佳的长期选项。
像这样循环:
$(document).ready(function(){
for(var i = 0; i < champions.length; i++) {
console.log(champions[i].name);
}
});
答案 2 :(得分:3)
注意:正如大家所指出的,你的数据结构有点奇怪。最好的想法是确保您的数组结构正确,以便您可以将其作为数组进行迭代,但您也可以迭代包含单个对象的数组:
jQuery&#39; s each在迭代对象方面做得很好。键:
if(champions.length) {
$.each(champions[0], function(key, value) {
console.log(value.name);
});
}
答案 3 :(得分:2)
这是一个长度为一的数组。像这样迭代对象:
var champs = champions[0]
var keys = Object.keys(champs)
// if you need them in order
keys = keys.map(Number).sort().map(String)
// iterate
keys.forEach(function (key, index) {
console.log(key) // "1"
console.log(champs[key]) // { "name": "etc" }
})
答案 4 :(得分:1)
如果你想循环这个数组
var champions = [{
"1":{
"name":"Aatrox",
"role1":"Top",
"role2":"Jungle"},
"2":{
"name":"Ahri",
"role1":"Middle"},
"3":{"
name":"Akali",
"role1":"Middle",
"role2":"Top"
}
}];
您的代码需要看起来像这样
for( var i = 0, end = champions.length; i < end; i++ ){
for( var attr in champions[i] ){
if( !champions[i].hasOwnProperty( attr ) ){
continue
}
// champions[i][attr] is the champion here
}
Alternateley,您可以使用看起来相当奇怪的代码将奇怪的json转换为常规数组。
var championsArray = Array.prototype.splice.call( champions[0] )
然后正常循环。