Me gustaría agrupar una matriz de acuerdo con su primera letra (alfabéticamente) para que el resultado se vea así:
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare']; [ { 'A' : [ 'Apple', 'Ape' ] }, { 'B': [ 'Banana', 'Bag' ] }, { 'C': [ 'Crab', 'Cupboard' ] }, { 'D': [ 'Dog', 'Dare' ] } ]¿Cómo haría esto usando el método groupBy Lodash? ¿También de tal manera que podría extenderse a todas las letras del alfabeto si fuera necesario? ¿Usarías también el método forEach Lodash?
¡Gracias por adelantado!
Con lodash puedes usar múltiples métodos para obtenerlo.
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare']; const grouped = _.map(_.entries(_.groupBy(words, _.first)), ([k,v]) => ({[k]:v})) console.log(grouped); <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>Con JavaScript simple y antiguo:
const words = ['Apple', 'Ape', 'Banana', 'Bag', 'Crab', 'Cupboard', 'Dog', 'Dare']; const grouped = Object.values(words.reduce((acc,word) => (acc[word[0]] ??= {[word[0]]: []}, acc[word[0]][word[0]].push(word), acc), {})) console.log(grouped);