在JavaScript ES6中使用if-else

在JavaScript ES6中使用if-else,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在学习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附近收到意外标记的错误,请让我知道我在这里做错了什么- 我的ES6代码- var myArr =

我正在学习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
附近收到
意外标记的错误,请让我知道我在这里做错了什么-

我的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) )

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

myArr.map( x => x%2==0 ? evenArr.push(x) : oddArr.push(x) )
试试上面的代码。它似乎起作用了


我刚刚用三元运算符(
?:
)替换了
if..else

如果不使用括号来定义箭头函数的主体,主体应该是一个表达式。在您的例子中,它不是表达式,而是一个
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))
或者您应该定义它以返回一个表达式,如下所示

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
来执行此操作<代码>映射
仅在需要从另一个数组的值创建新数组时使用。处理有副作用的函数时,应使用forEach。在您的情况下,您正在修改超出功能范围的对象。因此,
forEach
最适合这里。

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

您的代码具有误导性:
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);
    }
});
参考资料:


如果箭头函数体包含多条语句,则它必须包含在块中。而且,你不能像那样省略分号

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

如果有多条语句,则箭头函数体必须位于
{}
中。似乎您无论如何都应该使用forEach,map会创建一个新的数组,您将其丢弃。Code golf:myArr.forEach(x=>(x%2?oddArr:evenArr)。push(x));-)