Tengo dos matrices:
El alphabet se compone de letras (por ejemplo, el alfabeto inglés). dictionary es una lista de objetos con palabras y definiciones, siendo 'word' la clave para el valor de la palabra.
Quiero construir una nueva matriz llamada frequency que contenga la cantidad de palabras que comienzan con cada letra en la matriz alfabética, con índices correspondientes a la matriz alfabética.
He logrado llegar a lo siguiente:
alphabet.forEach(function(letter) { frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length; }); Esto me da valores individuales para frequency . ¿Cuál es la mejor sintaxis en Javascript para construir una matriz de esos valores? es otro filtro? ¿O debería el código usar el forEach actual manualmente con un índice incremental?
Con reduce, puede crear fácilmente un nuevo objeto con la letra como clave y una serie de coincidencias como valor.
const words = ["abba", "ant", "apple", "bannana", "barn", "car", "cat"]; const alphabet = "abcdefghijklmnopqrstuvwxyz".split(""); const result = alphabet.reduce((a, letter) => { a[letter] = words.filter(word => word.toLowerCase().startsWith(letter)); return a; }, {}); console.log(result);Primero, obtengamos algunos datos de ejemplo. Ignoraremos todo lo que no esté relacionado con la pregunta.
const alphabet = 'abcdefghijklmnopqrstuvwxyz'.split('') var dictionary = [{'word': 'alpha'}, {'word': 'beta'}, {'word': 'balloon'}] Luego, crearemos una variable de results , que contendrá una matriz de todos los resultados en orden alfabético.
var results = [] Ahora hacemos un bucle de la misma manera que lo hizo antes, pero push cada resultado a nuestra lista.
alphabet.forEach(function(letter) { frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length; results.push(frequency); });Como una solución alternativa que nos permite ver más fácilmente nuestros resultados, convertiremos los resultados en un objeto y usaremos letras como claves.
var results = {}; alphabet.forEach(function(letter) { frequency = dictionary.filter(item => item['word'].toLowerCase().startsWith(letter)).length; results[letter] = frequency; });