2017-02-27 80 views
-1

我正在创建一个琐事游戏,它会给用户4个答案。是使用数组来包含问题和答案这个游戏的一个很好的选择?如果是的话,什么是创建嵌套数组的正确方法。创建一个嵌套的数组?

+0

“好”和“正确”都是意见问题。我会用一组对象来解决所有问题:'questions = [{question:“哪个是水果?”,答案:2,选项:[“rock”,“paper”,“菠萝”,“剪刀“]},{question:”哪一种颜色?“,答案:1,选项:[”ennui“,”green“,”umami“,”cold“]}]'。 – nnnnnn

+0

哦,好吧,我正在考虑使用它,所以我会尝试一下。谢谢。 – skyeyl

回答

0

因此......在js中,制作一个嵌套数组并不是问题,但如果您正在考虑key =>值类型的数组,那么这是一个问题,在这种情况下,您需要使用一个对象,如果您需要的话,可以像使用数组那样对其进行foreach属性。你可以存储回答值阵列(我去过那里正是你想这样做的琐事学习游戏一样的东西),但你可以随时使用对象和做这样的事情

var userAnswer = 'something', 
    item = { 
     question: 'what is a?' 
     answers: [ 'a', 'b', 'c' ] 
     validAnswer: 0; 
    } 

if(userAnswer === item.answers[validAnswer]) { 
    console.log("is valid"); 
} 

一些其他的用法:

var userStats = { 
    status: 'alive', 
    makeDead: function() { 
     this.status = 'dead'; 
    }, 
    bringBackToLife: function() { 
     this.status = 'alive'; 
    }, 
} 
//then you can even do things like... 
userStats.makeDead(); 
console.log(userStats); //user will be dead 
userStats.bringBackToLife(); //user status will be alive 

我的意思是你应该罚款与阵列保持公正问题或问题和答案的(嵌套的[[]])阵列,但随后你开始玩阵列的比赛[0](应该是问题对吧?)数组[3](应该是无效答案?)然后呢?如果你仍然认为你的琐事游戏永远不会增长,那么你可能会坚持这个解决方案,但如果你认为它可能会演变只是使用对象来保持组织的东西。


更新 尽量保持你的对象小&不要让“上帝”的对象(查找SOLID规则),但如果你想假设保存/有一个包含一些问题,然后一个教训,你可以有一个大含有大量的小的物体,即

//you can make object to store some data and functions 
var LessonItem = function(question){ 
    this.question = question; 
    this.answers = []; 

    this.addAnswer = function(answer){ 
     this.answers.push(answer); 
    }; 
}; 

//you dont need the 'valid' part if there's always just one valid option 
var question1 = new LessonItem('What is?'); 
question1.addAnswer({text: 'It is something', valid: true }); 
question1.addAnswer({text: 'It is something not', valid: false }); 
question1.addAnswer({text: 'It is something 3', valid: true }); 

//and this would be our 'big' object, i.e. to save in json file or whatever 
var lesson = { 
    lesson_subject: 'something', 
    lesson_repeat: 3, 
    lesson_score: 124, 
    lesson_items: [ 
     question1, 
     //question2 
    ] 
}; 
console.log(lesson); 

但是,是的,你可以有很大的“对象”到“商店”别人,但要避免创造神一样的一个庞大的管理对象的一切事业将成为地狱时间:D以及即时通讯不知道如果你这样做,但你可以粘贴在你的JavaScript在谷歌铬工具控制台和检查它是否正常工作,无需重新加载页面...(用于快速检查:))

+0

非常感谢你,我会使用对象,因为我喜欢我的东西组织起来,如果我想在未来再次修改或重新使用代码,我可以回到这个结构。此外,如果我计划每个问题有8个问题,并有4个答案。我应该有8个不同的对象还是一个大对象?感谢您的帮助。 – skyeyl

+0

我会的,非常感谢。我感谢您的帮助。 – skyeyl