我目前正在学习有关Javascript的Udacity课程,一年后我重新上了课。我有点想知道答案了,但似乎无法将其反向工程为简单的if
语句
方向:
编写一系列三元语句,将变量类别设置为等于
“草食动物”(如果动物吃植物) 如果动物食用动物,则为“食肉动物” 如果动物食用植物和动物,则为“杂食动物” 如果动物不吃植物或动物,则未定义
使用eatsPlants
和eatsAnimals
变量来测试您的代码。
有效答案:
var eatsPlants = false;
var eatsAnimals = true;
var category = (eatsPlants) ? (eatsAnimals) ? "omnivore" : "herbivore"
: (eatsAnimals) ? "carnivore" : undefined;
console.log(category);
我想了解为什么会出现(eatsPlants)? (eatsAnimals)? 为什么(eatsAnimals)被使用两次?或者简单地说,有人可以帮我解决这个问题吗?我对编码还是很陌生。
我能想到的最好的办法是,但这并不能帮助我理解三元版本:
var eatsPlants = false;
var eatsAnimals = true;
var category;
if (eatsPlants && eatsAnimals)
{
category = "Omnivore";
} else if (eatsAnimals){
category="Carnivore"
} else if (eatsPlants) {
category = "Herbivore";
}
else
{
category= undefined;
}
console.log(category);
在此先感谢您的帮助
答案 0 :(得分:0)
这是一段令人困惑的代码。逻辑上缩进,看起来像:
var category = (eatsPlants)
? (eatsAnimals ? "omnivore" : "herbivore")
: (eatsAnimals ? "carnivore" : undefined);
如果eatsPlants
为true,则需要根据eatsAnimals
条件在“杂食动物”和“草食动物”之间做出决定。否则,如果eatsPlants
为假,则需要根据undefined
条件在“食肉动物”和eatsAnimals
之间做出决定。
因此,来自eatsPlants
的每个可能路径都需要检查eatsAnimals
条件,以确定要解析为哪个字符串。
if/else
版本如下所示:
var category;
if (eatsPlants) {
if (eatsAnimals) {
category = 'omnivore';
} else {
category = 'herbivore';
}
} else {
// eatsPlants is false:
if (eatsAnimals) {
category = 'carnivore';
} else {
category = undefined;
}
}
如您所见,通过使用与三元运算符版本相同的逻辑,它还必须检查eatsAnimals
两次。
我不建议在这里使用三元运算符-课程的问题是要求您编写看起来非常混乱的代码。这不是一种记忆的技术。我更喜欢使用数组,以便代码阅读器可以看到网格:
const categories = [
// eatsAnimals is
// 0 1
[undefined, 'Carnivore'], // eatsPlants is 0
['Herbivore', 'Omnivore'] // eatsPlants is 1
]
var eatsPlants = 0;
var eatsAnimals = 1;
console.log(categories[eatsPlants][eatsAnimals]);
答案 1 :(得分:0)
首先,不要灰心,继续学习编码。
诸如此类的东西,尤其是其格式化方式,容易使每个人:
var category = (eatsPlants) ? (eatsAnimals) ? "omnivore" : "herbivore"
: (eatsAnimals) ? "carnivore" : undefined;
在查看这种复杂的三元语句组合时,始终牢记三元语句的基本语法:
(condition) ? expression if true : expression if false
我将代码重新格式化并添加了注释,以使其更易于阅读:
var category =
(eatsPlants) ?
(eatsAnimals) ? // eatsPlants === true
"omnivore" : // eatsPlants === true && eatsAnimals === true
"herbivore" : // eatsPlants === true && eatsAnimals === false
(eatsAnimals) ? // eatsPlants === false
"carnivore" : // eatsAnimals === true
undefined; // eatsPlants === false && eatsAnimals === false
为清楚起见,如果使用单独的if语句重写逻辑,则会得到以下信息:
if (eatsPlants === true && eatsAnimals === true) {
category = 'omnivore';
}
if (eatsPlants === true && eatsAnimals === false)
category = 'herbivore';
}
if (eatsPlants === false && eatsAnimals === true)
category = 'carnivore';
}
if (eatsPlants === false && eatsAnimals === false)
category = 'undefined';
}