繁体   English   中英

javascript JSON多维数组

[英]javascript multidimensional array to JSON

请检查我的小提琴,并告诉我我做错了什么? 我不要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链接http://jsfiddle.net/rushdi1987/jvhgxawm/4/

小变化:

 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/

但是,重新构造您的初始数组(如果可以)是更好的选择。

jsFiddle Demo

Option0在其中,因为它是数组的一部分。 数组的0索引是"what is your name?" 在第一篇中,以及"what is your brother's name?" 在第二。

使用for in将会迭代每个索引,而采用0索引最终会使该字符串作为您可能的答案之一。 假设答案的[0]是名称,并且[1]作为标志,则[0][1]在“您叫什么名字?”上的结果 wh 此时数组的索引为0,因此您最终"option0" : {"ans" : w, "cor:"h"},使用"option0" : {"ans" : w, "cor:"h"},

修复很简单,只需使用条件if和continue跳过for in循环中的索引

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 += '}';

将不同的选项存储为数组更有意义。 因此:

["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>';
};

在这里,您已经更新小提琴

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM