Así que estoy haciendo un desafío de algoritmo en el que me dan una serie de palabras y debo poner en mayúscula la primera letra de la palabra y devolver el arr con las nuevas palabras. debe hacerse con recursividad. Creo que mi enfoque es incorrecto, pero si es conceptual, hágamelo saber y cómo debería pensar al respecto. Si alguien pudiera ayudar a describir cómo debería abordar esto tanto conceptualmente como en código, sería realmente útil.
Para describir mi idea de cómo funciona esto conceptualmente:
1st call: ['Car'] + capitalizeFirst([taco, banana]); 2nd call: ['Taco'] + capitalizeFirst([banana]); 3rd call: ['Banana'] + capitalizeFirst(['']);entonces mientras camina hacia atrás regresa
['Banana'] + ['""'] ['Taco'] + ['Banana'] ['Car'] + ['Taco','Banana'] returns ['Car','Taco','Banana'] pero lo que obtengo es 'CarTacoBanana'.
aquí está el enfoque que tomé.
function capitalizeFirst (arr) { if (!arr.length) return ''; arr[0] = arr[0].charAt(0).toUpperCase() + arr[0].slice(1); return [ arr[0] + capitalizeFirst(arr.slice(1)) ]; } capitalizeFirst(['car','taco','banana']); // ['Car','Taco','Banana'](editar) ¡Pude resolver que mi enfoque era incorrecto! aquí estaba mi solución
let newArr = []; if (!arr.length) { return newArr; } else { arr[0] = arr[0].charAt(0).toUpperCase() + arr[0].slice(1); newArr.push(arr[0]); } console.log(newArr, 'test'); return newArr.concat(capitalizeFirst(arr.slice(1))) // return newArr; function capitalizeFirst(arr) { // define the recursion terminal condition if (!arr.length) return []; // utility to capitalize first letter const capWord = s => s.charAt(0).toUpperCase() + s.slice(1); // a well-written recursive function makes clear what each iteration does, here: // capitalize the first word, then recurse on the remaining words... const first = arr[0], rest = arr.slice(1); return [ capWord(first), ...capitalizeFirst(rest) ]; } let arr = [ 'every', 'good', 'boy', 'does', 'fine' ]; let result = capitalizeFirst(arr); console.log(result); Creo que entendiste la idea aproximada, pero te perdiste algunas cosas del diseño general del algoritmo, así como la perspectiva de implementación. Es mejor devolver algo uniformemente (como [] aquí) y luego combinarlos para formar la respuesta. Así que cambié un poco el caso base y el caso inductivo y luego puede obtener la respuesta con el formato correcto.
Este es el código aproximado y puede verificar la prueba básica del caso de la esquina por su cuenta a partir de este punto.
Su proceso de pensamiento está cerca, pero sugeriría cambiar [""] a un simple [] - No veo de dónde viene la cadena vacía, pero no es necesaria -
const capitalize = ([ first, ...more ]) => first.toUpperCase() + more.join("") const capitalizeAll = ([ first, ...more ]) => first == null ? [] : [capitalize(first), ...capitalizeAll(more)] console.log(capitalizeAll(["car", "taco", "banana"])) // ["Car", "Taco", "Banana"] Tenga en cuenta que capitalizeAll no es más que Array.prototype.map con una llamada codificada para capitalize :
const capitalize = ([ first, ...more ]) => first.toUpperCase() + more.join("") console.log(["car", "taco", "banana"].map(capitalize)) // ["Car", "Taco", "Banana"]