Uso de if-else en JavaScript ES6

Estoy aprendiendo ES6 y el siguiente es mi código ES5 que funciona bien,

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

Ahora, si estoy convirtiendo esto a ES6, estoy recibiendo errores de Unexpected token , if , hágamelo saber lo que estoy haciendo mal aquí –

Mi código 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) ) 

Esto se debe a que las funciones de flecha aceptan expresiones mientras pasa una instrucción .

Su código es engañoso: Array.prototype.map implica que usaría el resultado de alguna manera, mientras que usted no lo está.

Si quisieras mejorar la semántica de tu código, Array.prototype.forEach que está diseñado específicamente para iterar sobre una matriz y no devolver nada:

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

Referencias

  • Array.prototype.forEach()
  • Funciones de flecha

Debe usar un operador ternario para las condiciones en línea.

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

Si no usa corchetes para definir el cuerpo de las funciones de flecha, el cuerpo debería ser una expresión. En su caso, no es expresión, sino una statement if .

Necesitas definirlo con el cuerpo compuesto, como este

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

O debería definirlo para devolver una expresión, como esta

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

Nota: No debe usar el map para hacer esto. map debe usarse solo cuando necesite crear una nueva matriz a partir de los valores de otra matriz. Debe usar forEach , cuando se trata de funciones que tienen efectos secundarios. En su caso, está modificando objects que están fuera del scope de su function. Así que para cada forEach sería la mejor forEach aquí.

Si un cuerpo de function de flecha contiene más de una instrucción, debe estar contenida en un bloque. Además, no puede omitir punto y coma así.

forEach es más semántico (ya que su function simplemente devuelve indefinido y no conserva la nueva matriz de todos modos) y puede usar el valor de x%2 directamente:

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

y también hay:

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

Prueba el código de arriba. Parece funcionar.

Acabo de replace if..else con operador ternario ( ? : if..else .