【问题标题】:Why does the ternary operator with the some method make this statement false?为什么带有 some 方法的三元运算符会使此语句为假?
【发布时间】:2020-09-06 03:24:15
【问题描述】:

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

  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 岁,但它返回 false。我正在尝试了解原因。

【问题讨论】:

  • 欢迎堆栈溢出!

标签: javascript arrays methods conditional-operator


【解决方案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
    });
    

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 2014-08-03
      • 2013-11-09
      • 1970-01-01
      • 2017-12-09
      • 2020-11-27
      • 2013-05-17
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多