请检查我的小提琴并告诉我我做错了什么? 我不想要option0。为什么会来。 请帮我。
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"},
},
}
这是我的jsfiddle链接 monomorphism restriction
答案 0 :(得分:2)
小变化:
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>';
}
};
如果你是console.log(objects [i] [n]),你会注意到你有一个问题字符串作为循环元素。所以,这样你可以跳过它......(或其他方式,如答案所示)
演示:http://jsfiddle.net/jvhgxawm/7/
但是,重新构建初始数组(如果可以的话) - 将是更好的选择。
答案 1 :(得分:2)
<强> jsFiddle Demo
强>
Option0
在那里,因为它是数组的一部分。您的数组的0索引在第一部分中为"what is your name?"
,在第二部分中为"what is your brother's name?"
。
使用for in将迭代每个索引,并且取0索引最终将该字符串作为您可能的答案之一。正如您假设答案的[0]是名称,[1]作为标志,[0]
和[1]
的结果是“你的名字是什么?”是w
和h
。此时数组的索引为0,因此最终得到了您不想要的"option0" : {"ans" : w, "cor:"h"},
。
修复很简单,只需使用条件if和continue
跳过for循环中的索引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 += '}';
答案 2 :(得分:0)
将不同选项存储为数组更有意义。所以:
["what is your name?", ["Alex", false],
["Hervy", false],
["Rico", true],
["Tom", false]
],
你应该这样做:
["what is your name?", [
["Alex", false],
["Hervy", false],
["Rico", true],
["Tom", false]
]],
然后,在内部循环中,将objects[i]
替换为objects[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>';
};
这里有fiddle updated。
希望它有所帮助!