为啥带有 some 方法的三元运算符会使此语句为假?
Posted
技术标签:
【中文标题】为啥带有 some 方法的三元运算符会使此语句为假?【英文标题】:Why does the ternary operator with the some method make this statement false?为什么带有 some 方法的三元运算符会使此语句为假? 【发布时间】:2020-09-06 03:24:15 【问题描述】:这里有几个问题。这是来自 Wes Bos 的 30 天 javascript 课程。
-
为什么三元运算符(已注释掉)会使其为假?
为什么我的解决方案不正确?
挑战
const people = [
name: 'Wes', year: 1988 ,
name: 'Kait', year: 1986 ,
name: 'Irv', year: 1970 ,
name: 'Lux', year: 2015
];
// Array.prototype.some() // is at least one person 19 or older?
// Array.prototype.every() // is everyone 19 or older?
韦斯的解决方案
const isOlderThan19 = people.some(function(person)
const currentYear = new Date().getFullYear();
// (currentYear - person.year >= 19) ? true : false
if (currentYear - person.year >= 19)
return true;
);
我的解决方案
const isOlderThan19 = (element) =>
let age = new Date().getFullYear() - element.year;
age >= 19;
console.log(people.some(isOlderThan19));
我尝试将设置到控制台的年龄记录下来。除了一个人之外,其他人都超过 19 岁,但它返回 false。我正在尝试了解原因。
【问题讨论】:
欢迎堆栈溢出! 【参考方案1】:1- 三元运算符前面没有return
,所以函数默认返回undefined
,这是不希望的。
2- isOlderThan19
没有返回任何内容,您可能错过了age >= 19
之前的返回词
由于缺少return
语句,这两个示例都失败了。
【讨论】:
在第一个版本中使用三元运算符也存在同样的问题。 该死的。我对箭头函数的假设太多了。这很尴尬。谢谢!【参考方案2】:试试这个
const isOlderThan19 = (element) =>
let age = new Date().getFullYear() - element.year;
return age >= 19;
console.log(people.some(isOlderThan19));
【讨论】:
【参考方案3】:您的三元语句需要实际返回,而不仅仅是布尔值
(currentYear - person.year >= 19) ? return true : return false
更准确地说
const isOlderThan19 = people.some(function(person)
const currentYear = new Date().getFullYear();
return (currentYear - person.year >= 19) ? true : false
);
【讨论】:
以上是关于为啥带有 some 方法的三元运算符会使此语句为假?的主要内容,如果未能解决你的问题,请参考以下文章
C-switch语句, 逻辑运算符, 三元运算符, 指针与函数