javascript多维数组到JSON
请检查一下我的小提琴,告诉我做错了什么? 我不想要选项0。为什么会来javascript多维数组到JSON,javascript,arrays,json,Javascript,Arrays,Json,请检查一下我的小提琴,告诉我做错了什么? 我不想要选项0。为什么会来 var qus ={ { "qus" :"what is your name?", "option0" : {"ans" : "w", "cor":"h"}, "option1" : {"ans" : "Alex", "cor":"false"}, "option2" : {"ans" : "Hervy", "cor":"false"}, "option3" : {"ans"
var qus ={
{
"qus" :"what is your name?",
"option0" : {"ans" : "w", "cor":"h"},
"option1" : {"ans" : "Alex", "cor":"false"},
"option2" : {"ans" : "Hervy", "cor":"false"},
"option3" : {"ans" : "Rico", "cor":"true"},
"option4" : {"ans" : "Tom", "cor":"false"},
},
}
这是我的JSFIDLE链接
零钱:
for (n in objects[i]) {
if(typeof objects[i][n] !='string') {
document.getElementById("out").innerHTML += '"option' + n + '" : {"ans" : ' + objects[i][n][0] + ', "cor:"' + objects[i][n][1] + '"},<br>';
}
};
for(对象[i]中的n个){
if(对象类型[i][n]!='string'){
document.getElementById(“out”).innerHTML++=''option'+n+':{“ans”:'+objects[i][n][0]+',“cor:'+objects[i][n][1]+'},
';
}
};
若您使用console.log(objects[i][n]),您会注意到在循环中有疑问字符串作为元素。所以,通过这种方式,您可以跳过它…(或者其他方式,如答案中所建议的)
演示:
但是,重新构造初始数组(如果可以的话)将是更好的选择。将不同的选项存储为一个数组更有意义。因此:
["what is your name?", ["Alex", false],
["Hervy", false],
["Rico", true],
["Tom", false]
],
你应该这样做:
["what is your name?", [
["Alex", false],
["Hervy", false],
["Rico", true],
["Tom", false]
]],
然后,在内部循环中,将对象[i]
替换为对象[i][1]
:
for (n in objects[i][1]) {
document.getElementById("out").innerHTML += '"option' + n + '" : {"ans" : ' + objects[i][1][n][0] + ', "cor:"' + objects[i][1][n][1] + '"},<br>';
};
for(对象[i][1]中的n个){
document.getElementById(“out”).innerHTML++=''option'+n+':{“ans”:'+objects[i][1][n][0]+',“cor:'+objects[i][1][n][1]+'},
';
};
给你钱
希望有帮助
选项0
位于其中,因为它是数组的一部分。数组的0索引在第一部分是“你叫什么名字?”
,在第二部分是“你哥哥叫什么名字?”
在中使用for将迭代每个索引,使用0索引最终将该字符串作为可能的答案之一。假设答案的[0]是姓名,[1]是标志,那么关于“你叫什么名字?”的[0]
和[1]
的结果是w
和h
。此时数组的索引为0,因此您将得到“option0”:{“ans”:w,“cor:”h“},
,这是您不想要的
解决方法很简单,只需在for-in循环中使用条件if和continue跳过该索引
if(n == 0)continue;
我稍微重构了你的代码,使它更容易阅读
var objects = [
[
"what is your name?",
["Alex", false],
["Hervy", false],
["Rico", true],
["Tom", false]
],
[
"what is your brother's name?",
["Alex", false],
["Hervy", true],
["Rico", false],
["Tom", false]
]
];
var el = document.getElementById("out");
el.innerHTML += 'var qus ={ <br>';
for (i in objects){
var qset = objects[i];
el.innerHTML += '{ <br>';
el.innerHTML += '"qus" :"' + qset[0] + '",<br>';
for (n in qset){
if(n == 0)continue;
var nameset = qset[n];
el.innerHTML += '"option' + n;
el.innerHTML += '" : {"ans" : ' + nameset[0];
el.innerHTML += ', "cor:"' + nameset[1] + '"},<br>';
}
el.innerHTML += '},<br><br>';
}
el.innerHTML += '}';
var对象=[
[
“你叫什么名字?”,
[“亚历克斯”,错],
[“赫维”,错],
[“Rico”,对],
[“汤姆”,错]
],
[
“你哥哥叫什么名字?”,
[“亚历克斯”,错],
[“赫维”,没错],
[“Rico”,假],
[“汤姆”,错]
]
];
var el=document.getElementById(“out”);
el.innerHTML+='var qus={
';
用于(对象中的i){
var qset=对象[i];
el.innerHTML+='{
';
el.innerHTML+=''qus:“+qset[0]+',
”;
对于(qset中的n){
如果(n==0)继续;
变量名称集=qset[n];
el.innerHTML+='选项'+n;
el.innerHTML+='':{“ans”:'+名称集[0];
el.innerHTML++=',“cor:“'+nameset[1]+'”},
';
}
el.innerHTML+='},
';
}
el.innerHTML+='}';
side-issue,而不是手动输出JSON,您应该将数组转换为所需的对象,然后执行JSON.stringify(obj)
。更不容易出错。非常感谢您的帮助。你介意再解释一件事吗?如果条件解决了问题,那该怎么办。这种情况意味着什么?@rushdi-当然。基本上,该条件所做的是跳过数组中的第0个元素。这是第一个元素(基于0的索引)。这个元素是您的字符串“what is your brother's name”。因此,通过查看n==0
我们正在查看当前索引是否实际上是字符串“what is your brother's name”。如果是这种情况,我们不想将其作为一组名称和布尔值进行处理,我们只想跳过它。关键字continue
允许我们进入循环的下一个迭代。