从JSON中选择随机对象

时间:2015-05-05 19:49:09

标签: javascript jquery json random

我有以下代码:

$.getJSON('js/questions1.json').done(function(data){
        window.questionnaire = data;
        console.log(window.questionnaire);
        startGame();
    });

这会从服务器带来一个json并将其记录到变量中。在此之后,我想选择一个位于questions.json文档中的随机问题:

function pickRandomQuestion(){
        window.selectedquestion = window.questionnaire[Math.floor(Math.random * window.questionnaire.length)];
        console.log(window.selectedquestion);
        console.log(window.questionnaire);
    }

然而,当console.log()选择的问题变量时,没有任何回复,它是未定义的。我的代码有问题吗?我三倍检查了它,我发现它没什么不好,但它可能只是我和我一起玩游戏。

这里是json的样子:

"q1" : {
        "question" : "This country is one of the largest wine-producing countries of the world, where wine is grown in every region of the country. Which country is this?",
        "a"        : "France",
        "b"        : "Italy",
        "c"        : "Germany",
        "d"        : "Australia",
        "corrrect" : "b"
    },
    "q2" : {
        "question" : "What is the name for the type of art portrait that deliberately exaggerates a person?",
        "a"        : "Environmental",
        "b"        : "Cartooning",
        "c"        : "Caricature",
        "d"        : "Tribal",
        "corrrect" : "c"
    },
    "q3" : {
        "question" : "Who was the first president of the United States?",
        "a"        : "Abraham Lincoln",
        "b"        : "Ronald Reagan",
        "c"        : "George Washington",
        "d"        : "Barack Obama",
        "corrrect" : "c"
    }...

3 个答案:

答案 0 :(得分:7)

那是因为math.random不是属性。

将其更改为:Math.random()

并因为window.questionnaire是一个您无法使用索引访问它的对象,即(0,1,2)

你可以这样做:

function pickRandomQuestion(){
        var obj_keys = Object.keys(window.questionnaire);
        var ran_key = obj_keys[Math.floor(Math.random() *obj_keys.length)];
        window.selectedquestion = window.questionnaire[ran_key];
        console.log(window.selectedquestion);
        console.log(window.questionnaire);
}

答案 1 :(得分:1)

每当从json获取数据时,您都可以随机对数据进行排序:

data.sort(function() { return .5 - Math.random();});

$.getJSON('js/questions1.json').done(function(data){
    window.questionnaire = data;
    window.questionnaire.sort(function() { return .5 - Math.random();});
    console.log(window.questionnaire);
    startGame();
});

然后,在pickRandomQuestion()中,你可以只取window.questionnaire中的第一个元素,知道它是随机排序的。

注意:您也可以随时对pickRandomQuestion()例程中的列表进行随机排序,但我想您可能需要一些逻辑,以便相同的随机问题不会像往常一样频繁出现,或者至少pickRandomQuestion()不会返回与当前问题相同的问题。

答案 2 :(得分:0)

我认为这应该有用

function pickRandomQuestion(){
    window.selectedquestion = window.questionnaire['q' + Math.floor(Math.random() * window.questionnaire.length)];
    console.log(window.selectedquestion);
    console.log(window.questionnaire);
}