Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript多维数组到JSON_Javascript_Arrays_Json - Fatal编程技术网

javascript多维数组到JSON

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"

请检查一下我的小提琴,告诉我做错了什么? 我不想要选项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" : "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
允许我们进入循环的下一个迭代。