在JavaScript ES6中使用if-else
我正在学习ES6,下面是我运行良好的ES5代码-在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 =
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);
}
});
参考资料:
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))
;-)