为什么带有 some 方法的三元运算符会使此语句为假?

Why does the ternary operator with the some method make this statement false?

这里有几个问题。这是来自 Wes Bos 的 JavaScript 课程的 30 天。

  1. 为什么三元运算符(注释掉)会导致错误?
  2. 为什么我的解决方案不正确?

挑战

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 岁,但 returns 错误。我想知道为什么。

1- 三元运算符前面没有return,所以函数默认为return undefined,这是不需要的

2- isOlderThan19 没有 returning 任何东西,你可能错过了 age >= 19

之前的 return 字

由于缺少 return 语句,两个示例都失败了。

试试这个

const isOlderThan19 = (element) => {
    let age = new Date().getFullYear() - element.year;
    return age >= 19;
}

console.log(people.some(isOlderThan19));

您的三元语句实际上需要 return,而不仅仅是布尔值

(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
});