【问题标题】:Evaluation in arrow functions箭头函数的评估
【发布时间】:2018-10-04 23:06:15
【问题描述】:

我是箭头函数的新手,我试图仅在数组未定义但我无法弄清楚语法时才添加到数组中。我应该如何编写下面的 if 语句?谢谢!

let carList = cars.map(car => (
  if(car.owner !== "undefined"){ // this is the condition I want.
  do something
 }
));

【问题讨论】:

标签: javascript reactjs react-native eslint


【解决方案1】:

与任何其他函数一样,主体必须在花括号中,而不是括号:

let carList = cars.map(car => {
   // code here
});

请记住,map() 会为原始数组中的每个元素创建一个新元素。如果您只想对列表的某些元素执行操作,则应首先使用filter()

let carList = cars.filter(car => {
   return car.owner !== undefined
}).map(car => {
   // Do something to each car
});

请注意,undefined 是关键字,不需要引号。使用字符串值 "undefined" 虽然合法,但可能会令人难以置信的混乱,因此我建议不要这样做。

【讨论】:

  • 谢谢,但我只是写了伪代码。我正在循环浏览它,但我的问题是我不知道如何忽略未定义所有者的汽车。
  • @J.Doe 我的答案的第二部分解决了这个问题。您可能需要刷新页面才能看到我的编辑。
  • “像任何其他函数一样,主体必须在花括号中,而不是括号中:”这不是真的。在这种情况下是这样,但不是普遍的。
  • 谢谢,我现在看到了,会试试看的。
【解决方案2】:

听起来你需要filter 而不是map

const cars = [
  { owner: '', age: 12 },
  { owner: 'bob', age: 1 },
  { owner: undefined, age: 2 },
  { owner: 'steve', age: 13 },
  { age: 1 }
];

let carList = cars.filter(car => car.owner);

console.log(carList);

【讨论】:

    【解决方案3】:

    如果要通过字符串进行比较,则需要添加 typeof。
    另外,将函数用大括号括起来。

    let carList = cars.map(car => {
      if(typeof(car.owner) !== "undefined"){ // this is the condition I want.
      do something
     }
    });
    

    或放弃字符串引号

    let carList = cars.map(car => {
      if(car.owner !== undefined){ // this is the condition I want.
      do something
     }
    });
    

    或者只使用布尔值不。

    let carList = cars.map(car => {
      if(!car.owner){ // this is the condition I want.
      do something
     }
    });
    

    let cars = [{},{owner:'foo'},{owner:'bar'}, {fun:'none'}];
    let carList = cars.map(car => {
      if(!car.owner){ // this is the condition I want.
        console.log(car,'has no owner');
     }}
    );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2017-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      相关资源
      最近更新 更多