在JavaScript ES6中使用if-else

Use of if-else in JavaScript ES6

本文关键字:if-else JavaScript ES6      更新时间:2023-11-29

我正在学习ES6,下面是运行良好的ES5代码-

var myArr = [34,45,67,34,2,67,1,5,90];
var evenArr = [];
var oddArr = [];
myArr.map(function(x){
  if(x%2==0) evenArr.push(x);
  else oddArr.push(x);
});

现在,如果我将其转换为ES6,我会在if附近得到Unexpected token的错误,让我知道我在这里做错了什么-

我的ES6代码-

var myArr = [34,45,67,34,2,67,1,5,90];
var evenArr = [];
var oddArr = [];
myArr.map( x => if(x%2==0) evenArr.push(x) else oddArr.push(x) )

这是因为当您传递语句时,箭头函数接受表达式

您的代码具有误导性:Array.prototype.map暗示您将以某种方式使用结果,而您没有。

如果你想改进代码的语义,你可以使用Array.prototype.forEach,它是专门为迭代数组而设计的,不会返回任何东西:

var myArr = [34,45,67,34,2,67,1,5,90];
var evenArr = [];
var oddArr = [];
myArr.forEach(x => {
    if (x % 2 === 0) {
        evenArr.push(x);
    } else {
        oddArr.push(x);
    }
});

参考文献:

  • Array.prototype.forEach()
  • 箭头函数

对于内联条件,应该使用三元运算符。

myArr.map( x => x%2==0 ? evenArr.push(x) : oddArr.push(x) )

如果不使用括号定义Arrow函数的主体,那么主体应该是一个表达式。在您的情况下,它不是表达式,而是if语句。

你需要用复合体来定义它,比如这个

myArr.map(x => {
    if (x % 2 === 0)
        evenArr.push(x);
    else
        oddArr.push(x);
})

或者你应该定义它来返回一个表达式,比如这个

myArr.map(x => x%2==0 ? evenArr.push(x) : oddArr.push(x))

注意:您不应该使用map来执行此操作。只有当您需要根据另一个数组的值创建新数组时,才应使用map。在处理有副作用的函数时,应该使用forEach。在您的情况下,您正在修改您的函数范围之外的对象。因此forEach将是最适合这里的。

如果箭头函数体包含多个语句,则它必须包含在一个块中。此外,不能省略这样的分号。

forEach更具语义(因为您的函数只返回未定义,而且您无论如何都不会保留新数组),并且您可以直接使用x%2的值:

myArr.forEach( x => {if(x%2) oddArr.push(x); else evenArr.push(x)} )

还有:

myArr.forEach(x => [evenArr,oddArr][x%2].push(x));
var myArr = [34,45,67,34,2,67,1,5,90];
var evenArr = [];
var oddArr = [];
myArr.map( x => (x%2==0)? evenArr.push(x) : oddArr.push(x) )

请尝试上面的代码。这似乎奏效了。

我刚刚用三元算子(? :)代替了if..else