JS: Arrays

Teoría: Procesamiento de cadenas mediante la conversión a arrays

En muchas entrevistas técnicas piden resolver problemas que prueben tu habilidad para manipular strings y arrays. Uno de los problemas más comunes es:

Dada una cadena de texto, escribir una función que capitalice la primera letra de cada palabra.

Por ejemplo:

const text = 'hello códica';
capitalizeWords(text); // 'Hello Códica'

Existen varias formas de resolverlo, pero en este caso exploraremos una solución utilizando arrays. Veamos cómo funciona.


Paso 1: Dividir la cadena en palabras

Para empezar, queremos separar el texto en palabras individuales. Para ello, usamos el método split(), que nos permite dividir una cadena en un array de partes, especificando un delimitador. En este caso, usaremos un espacio (' ') como delimitador:

const capitalizeWords = (sentence) => {
  // Definimos el separador, que en este caso es un espacio
  const separator = ' ';
  // Dividimos la cadena en palabras
  const words = sentence.split(separator);
  console.log(words); // ['hello', 'códica']
};

Esto convierte la cadena 'hello códica' en un array ['hello', 'códica'], donde cada elemento representa una palabra.


Paso 2: Capitalizar cada palabra

Ahora que tenemos las palabras separadas, necesitamos convertir la primera letra de cada palabra en mayúscula. Como JavaScript no tiene un método directo para esto en strings, crearemos una función capitalize():

const capitalize = (text) =>
  (text.length === 0) ? text : `${text[0].toUpperCase()}${text.slice(1)}`;

¿Cómo funciona?

  • text[0].toUpperCase() convierte la primera letra en mayúscula.
  • text.slice(1) obtiene el resto de la palabra sin modificarlo.
  • Si la cadena es vacía (text.length === 0), simplemente la devolvemos como está, para evitar errores.

Ahora aplicamos esta función a cada palabra en nuestro array:

const capitalizeWords = (sentence) => {
  const separator = ' ';
  const words = sentence.split(separator);

  // Creamos un nuevo array con las palabras capitalizadas
  const capitalizedWords = [];
  for (const word of words) {
    capitalizedWords.push(capitalize(word));
  }

  // Unimos las palabras capitalizadas nuevamente con espacios
  return capitalizedWords.join(separator);
};

console.log(capitalizeWords('hello códica')); // 'Hello Códica'

Paso 3: Unir el array en una cadena

El último paso es la operación inversa a split(). Ahora, con join(' '), reunimos nuevamente las palabras en una sola cadena, separadas por espacios.

return capitalizedWords.join(separator);

Esto nos da la cadena final con cada palabra correctamente capitalizada.


Nota sobre la mutabilidad de words

Al observar nuestro código, notarás que no modificamos el array words directamente, sino que creamos un nuevo array capitalizedWords. Esto tiene una ventaja importante: facilita la depuración. Si algo sale mal, siempre podemos inspeccionar words y capitalizedWords por separado, sin alterar los datos originales.

Si hubiéramos modificado words directamente, perderíamos la referencia a la versión original, lo que haría más difícil detectar errores.


Resumen

  • Dividimos la cadena en un array de palabras usando split().
  • Creamos una función capitalize() para convertir la primera letra de cada palabra en mayúscula.
  • Recorremos el array aplicando capitalize() a cada palabra.
  • Volvemos a unir el array en una cadena con join(' ').
  • Evitamos modificar el array original, lo que facilita depuración y mantenimiento.

Esta es solo una de las muchas formas de resolver el problema. En otros cursos, exploraremos métodos alternativos, como el uso de expresiones regulares.