首页 > 解决方案 > JavaScript 研究。Map() 代码是如何执行的?

问题描述

晚上好。

我真的很难解决这个问题,我不确定我是否错过了一些非常愚蠢的东西,但这是我的代码和我的问题。

const question = new Map();

question.set('question', 'What is the official name of the latest major JavaScript version?');
question.set(1, 'ES5');
question.set(2, 'ES6');
question.set(3, 'ES2015');
question.set(4, 'ES7');
question.set('correct', 3);
question.set(true, 'Correct answer :D');
question.set(false, 'Wrong, please try again!');

for (let [key, value] of question.entries()) {
    if (typeof(key) === 'number') {
        console.log(`Answer ${key}: ${value}`);
    }
}

const ans = parseInt(prompt('Write the correct answer'));

console.log(question.get(ans === question.get('correct')));

当我在提示框中插入正确的值时,有人可以向我解释一下吗?解释器?...知道检查下一行代码以在控制台中显示“正确”还是“错误”?取决于我的输入。我知道我们有 akey of correct并且它的值设置为3但我们什么时候告诉它执行下一行代码取决于我的回答?它是否只是解析整个代码,查看一个真实的语句,然后执行它附加的任何内容,否则执行错误的语句?如何,为什么?如果我没有通过,请道歉很清楚。

标签: javascriptdictionary

解决方案


Map有一个 key 条目true和一个false. 其中一个是通过使用与此表达式对应的键来检索的:

ans === question.get('correct')

true当给定答案等于正确答案时,此表达式返回,false否则返回。然后将此布尔结果用作集合中下一次查找的键:

question.get(ans === question.get('correct'))

这有效地检索了存储在 Map 中的falseor的值。true因此正确的短语被检索(并显示)。

如果你想把那条神奇的线写得更详细一点,它可能看起来像这样:

let output;
if (ans === question.get('correct')) { // get() returns 3 here.
    output = question.get(true); // This retrieves 'Correct answer :D'
} else {
    output = question.get(false); // This retrieves 'Wrong, please try again!'
}
console.log(output); 

但是要意识到ans === question.get('correct')布尔表达式是怎样的,这意味着它代表falseor true,正是您想要作为值传递的内容question.get,以便检索要输出的短语。

因此,if您可以执行以下操作,而不是构造:

let isCorrect = (ans === question.get('correct')); // false or true 
let output = question.get(isCorrect); // This retrieves one of the two phrases
console.log(output); 

这三行所做的可以缩短为一行:

console.log(question.get(ans === question.get('correct')));

注意:以这种方式使用地图看起来不正确。你真的应该为问题使用一个数组,为其他东西使用普通对象。


推荐阅读