javascript multidimentional数组到JSON

时间:2015-09-18 23:36:15

标签: javascript arrays 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链接 monomorphism restriction

3 个答案:

答案 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]的结果是“你的名字是什么?”是wh。此时数组的索引为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

希望它有所帮助!