Explicación de Cartografía de strings
Objetivo de este acertijo: Escribir una función que tome un string y devuelva un objeto que tenga cada carácter del string como una propiedad, cada una de las cuales debe tener un arreglo de índices donde aparezca el carácter.
Tutorial de la solución:
La función que escribas en este acertijo, tomará un string y devolverá un objeto que muestre cuales son los caracteres que están en el string y todos los índices donde aparecen estos caracteres. Por ejemplo, llamamos a la función en el string 'bookkeeper'
:
mapString('bookkeeper');
Esto devolverá un objeto que se verá así:
{
b: [0],
o: [1, 2],
k: [3, 4],
e: [5, 6, 8],
p: [7],
r: [9]
}
El objeto tiene una propiedad diferente para cada carácter en el string. Dentro de cada propiedad hay un arreglo que contiene las posiciones de los índices donde aparecen los caracteres.
Comienza escribiendo la función al crear un objeto vacío dentro de la función. Por ejemplo:
let map = {};
Luego, agrega un classic for loop para iterar por el string.
for (let i = 0; i < string.length; i++) {
}
Dentro del for loop, crea otra variable local para almacenar el carácter actual. Por ejemplo:
let letter = string[i];
Luego, usa una if else statement (también se puede usar una declaración ternaria) para verificar si una propiedad ya existe en map
para la letra actual. Si la propiedad no existe, será indefinida, y esto es falsy. La if else statement se verá algo como esto:
if (map[letter]) {
} else {
}
Si la propiedad ya existe (es decir, el carácter actual se ha visto antes), empuja el índice del carácter actual al arreglo que contiene la propiedad. Si no existe, crea el arreglo (con el índice adentro como el primer elemento). Debe aparecer así:
if (map[letter]) {
map[letter].push(i);
} else {
map[letter] = [i];
}
Por último, al final de la función, devuelve map
.
Conceptos de JavaScript: funciones, objetos, propiedades, strings, for loops, if statements, veracidad
Código adicional (código oculto que se ejecuta antes del código del acertijo):
defineModule(
'grasshopper.wordList',
{
word: pickRandom(['boo', 'banana', 'bookkeeper', 'code'])
}
);