Estoy aprendiendo javascript y mientras estaba en Codewars no pude resolver este problema, así que busqué una solución.
Esta es la solución que encontré y simplemente no entiendo por qué debe haber una segunda declaración de devolución dentro del método del mapa. Si alguien pudiera darme alguna idea sería muy apreciado. Gracias.
let spinWords = (str) => { return str.split(' ').map(function(string) { return (string.length > 4) ? string.split('').reverse().join('') : string }).join(' '); }La función .map acepta una devolución de llamada, y esa devolución de llamada es una función que se ejecuta para cada elemento de la matriz. Para un ejemplo simple:
const upperCase = str => str.toUpperCase(); console.log( ['a', 'b'].map(upperCase) ); Arriba, se llama con ambos elementos de la matriz: upperCase('a') y upperCase('b') , y los resultados se colocan en la nueva matriz, que luego se registra en console.log .
También puede definir funciones en línea y pasar eso a .map :
console.log( ['a', 'b'].map(str => str.toUpperCase()) );Tu código es original
str.split(' ').map(function(string) { return (string.length > 4) ? string.split('').reverse().join('') : string }).join(' ');está haciendo el mismo tipo de cosas, excepto que
function , en lugar de una función de flecha, y por lo tanto necesita la palabra clave de return para devolver valores ( a diferencia de las funciones de flecha en algunas circunstancias ).El segundo retorno es una función de devolución de llamada. Prueba a verlo así:
function reverseWord(string) { return (string.length > 4) ? string.split('').reverse().join('') : string } let spinWords = (str) => { return str.split(' ').map(reverseWord).join(' '); } Así que reverseWord es su función de devolución de llamada, con su propio retorno. El valor que devuelve es el valor utilizado en la matriz asignada.