He estado tratando de obtener una salida de objeto de una matriz ordenada alfabéticamente.
Por ejemplo, si tengo arr = ['anger', 'apple', 'bowl', 'cat'] entonces quiero que mi objeto sea como obj = { a: ['anger', 'apple'], b: ['bowl'], c:['cat']}
Hasta ahora tengo esto, pero no funciona correctamente.
const p4 = function (arr) { let val = {}; const sortArr = arr.sort(); for (let i = 0; i < sortArr.length; i++) { for (let j = i; j < sortArr.length; j++) { if (sortArr[i].charAt(0) == sortArr[j].charAt(0)) { val.sortArr[j].charAt(0) =sortArr[j] ; } } return val; } };Puedes usar reduce :
let arr = ['anger', 'apple', 'bowl', 'cat'] const result = arr.reduce((a, b) => { let c = b.charAt(0); if (a[c]) { a[c].push(b) } else { a[c] = [b]; } return a; }, {}) console.log(result)En el código:
let val = {}; const sortArr = arr.sort();sort ordena en su lugar y devuelve la matriz ordenada, por lo que sortArr y arr hacen referencia a la misma matriz (ordenada). Podrías simplemente hacer:
arr.sort()y use arr a continuación en lugar de sortArr .
for (let i = 0; i < sortArr.length; i++) { for (let j = i; j < sortArr.length; j++) {No hay necesidad de procesar la matriz dos veces. Todo lo que necesitas hacer es:
P.ej
function arrToObj(arr) { arr.sort(); let result = {}; for (let i=0, c; i<arr.length; i++) { c = arr[i].substr(0,1); if (!result[c]) { result[c] = []; } result[c].push(arr[i]); } return result; } let arr = ['anger', 'apple', 'bowl', 'cat'] console.log(arrToObj(arr));También puedes hacer lo mismo con reduce :
let arr = ['anger', 'apple', 'bowl', 'cat'] let obj = arr.sort().reduce((acc, v) => { let c = v.substr(0,1); if (!acc[c]) acc[c] = []; acc[c].push(v); return acc; }, {}); console.log(obj);