Vengo de Python y estoy buscando una función de iterador de una sola línea para cualquier matriz, donde también puedo verificar una condición y devolver un cambio simple a los elementos.
El resultado esperado debe coincidir con el método:
function arrayEvenItemIncrement(myArray){ for (let i = 0; i < myArray.length; i++){ if (myArray[i]%2==0){ myArray[i]++; } } return myArray; } Intenté usar for (i of myArray){ } pero esto todavía no cumple mi propósito.
Creo que la forma más clara de hacer lo que quiere aquí sería asignar una nueva matriz en lugar de mutar la anterior:
const arrayEvenItemIncrement = myArray => myArray.map((val, i) => i % 2 === 1 ? val : val + 1);Si tiene que mutar la matriz existente, se vuelve significativamente más feo.
const arrayEvenItemIncrement = myArray => ( myArray.forEach((val, i) => { if (i % 2 === 0) myArray[i]++; }), myArray);o
const arrayEvenItemIncrement = myArray => { myArray.forEach((val, i) => { if (i % 2 === 0) myArray[i]++; }); return myArray };Pero no lo recomendaría, póngalo en varias líneas.
Técnicamente, puede comprimir cualquier código JS en una sola línea, pero más allá de las manipulaciones simples, generalmente no es una buena idea porque sacrifica la legibilidad, que es mucho más importante que reducir el LoC. El código profesional y mantenible no es una competencia de golf.
Gracias por las respuestas. Me he conformado con esto:
myArray.forEach(el=>el%2===0?newArray.push(el):null);