首页 > 解决方案 > 用 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”。如何定义对象?

标签: javascriptobjectif-statement

解决方案


要回答最直接的问题 - 您不需要函数for主体中的循环,submitt()因为您不需要在这里迭代,您需要检查answer映射中键值对的各种组合,这是在(诚​​然笨拙的)if声明。您可以删除for循环并通过正确的全名引用元素,或者您可以使用解构将答案分配给局部变量并节省一些输入。

通过解构,您的函数将如下所示:

function submitt() {
  const {a, b, c, d, e} = answers

  if (a === 2) { /* ... existing if logic goes here ... */ }
}

不过,这段代码更大的问题是电影选择逻辑是硬编码的。更好的方法是以某种方式对答案进行编码,使得答案的独特组合会产生一个独特的“关键”——然后你可以简单地将所有电影标题放在一张地图中,并完全摆脱巨大的“如果”。尽管不知道测验问题/答案及其背后的逻辑,但很难提出最好的方法

希望有帮助!


推荐阅读