javascript - 用 JAVASCRIPT 编写一个测验,返回电影以在 Netflix 上观看
问题描述
我现在正在尝试学习对象。所以我有五个不同的变量设置为零,每次在测验中单击时都会增加 1。(我正在创建一个测验,以确定您应该在 Neflix 上观看什么电影或节目。)
var answer = {
a: 0,
b: 0,
c: 0,
d: 0,
e: 0
};
function selection (choice) {
answer[choice]++;
console.log(answer);
console.log(choice);
};
但是,我的麻烦是返回最大数量的对象,一旦我这样做了,我就会根据返回的对象返回一个电影名称。我试图做两个功能......
function game() {
var biggest = 'a';
for (var choice in answer)
if(answer[choice] > answer[biggest]) {
biggest = choice;
console.log(biggest);
}
return biggest;
};
上面的函数比底部的要干净得多,但没有电影标题。
function submitt() {
const {a, b, c, d, e} = answer
if (a===2) {return 'Hobbs and Shaw'}
if(a===1 && b===1) {return 'Jumanji' }
if(a===1 && c===1) {return 'The Invitation'}
if(a===1 && d===1) {return 'Incredibles 2'}
if(a===1 && e===1) {return 'Someone Great'}
if(b===2) {return 'The Good Place'}
if(b===1 && c===1) {return 'Black Mirror'}
if(b===1 && d===1) {return 'Liv and Maddie'}
if(b===1 && e==1) {return 'Jane the Virgin'}
};
我的问题是,我如何在 if 语句中定义一个对象,因为我得到的错误是“a is not defined”。如何定义对象?
解决方案
要回答最直接的问题 - 您不需要函数for
主体中的循环,submitt()
因为您不需要在这里迭代,您需要检查answer
映射中键值对的各种组合,这是在(诚然笨拙的)if
声明。您可以删除for
循环并通过正确的全名引用元素,或者您可以使用解构将答案分配给局部变量并节省一些输入。
通过解构,您的函数将如下所示:
function submitt() {
const {a, b, c, d, e} = answers
if (a === 2) { /* ... existing if logic goes here ... */ }
}
不过,这段代码更大的问题是电影选择逻辑是硬编码的。更好的方法是以某种方式对答案进行编码,使得答案的独特组合会产生一个独特的“关键”——然后你可以简单地将所有电影标题放在一张地图中,并完全摆脱巨大的“如果”。尽管不知道测验问题/答案及其背后的逻辑,但很难提出最好的方法
希望有帮助!
推荐阅读
- c# - C#在窗口之间传递数据(WPF)
- javascript - 在每行的第一个元素上设置边框
- sql-server - SQL Azure 中的 Active Directory 身份验证和延迟问题
- c# - PostAsync 执行后立即从继承的地方返回
- excel - Excel VBA - 验证列中的电子邮件地址并复制到剪贴板
- javascript - 如果需要,如何创建一个可以导入单个组件的库 à la lodash
- nginx - Nginx 入口控制器不会通过重定向保留 url
- angular - 无法使用 Angular CLI 创建新项目
- google-cloud-dataflow - 如何获取通过数据流运行的查询的 BigQuery 作业 ID?
- wso2 - WSO2:如何通过 Java API 更改“帐户管理策略”特别是“锁定空闲帐户”