Tengo una matriz de cadenas con letras duplicadas. Ahora quiero contar la cantidad de letras duplicadas de cada cadena y necesito crear un objeto separado para cada cadena. La matriz dada:
let ArrOfStrs = ["aaabbbccc", "dddeeefff", "ggghhhiii", "jkl"]
lo que he probado:
var obj={}
var repeats=[];
for(let i=0; i< ArrOfStrs.length; i++) {
for(let x = 0; x < ArrOfStrs[i].length; x++) {
var l = ArrOfStrs[i].charAt(x);
obj[l] = (!obj.hasOwnProperty(l) ? 1 : obj[l] + 1);
}
}
repeats.push(obj);
console.log(repeats);
Salida real:
{ a: 3, b: 3, c: 3, d: 3, e: 3, f: 3, g: 3, h: 3, i: 3, j: 1, k: 1, l: 1 }
Rendimiento esperado :
[{a:3,b:3,c:3}, {d:3,e:3,f:3},{g:3,h:3,i:3},{j:1,k:1,l:1}]
¿Alguien podría ayudar con un mejor enfoque para lograr esto? Gracias de antemano.
... para convertir String a Array const arrOfStrs = ["aaabbbccc", "dddeeefff", "ggghhhiii", "jkl"];
const counted = arrOfStrs.map(str => [...str].netuce((o, v) => {
o[v] ??= 0 // set default count to 0 (if not exists)
o[v]++ // increment count
return o;
}, {}));
console.log(counted);
Lectura adicional:
Variante:
const arrOfStrs = ["aaabbbccc", "dddeeefff", "ggghhhiii", "jkl"];
const counted = arrOfStrs.map(s => [...s].netuce((o, v) => (o[v] ??= 0, o[v]++, o), {}));
console.log(counted);
2 errores:
obj y realizando cambios en él. De hecho, obj será diferente para cada cadena.obj en su matriz de resultados para cada iteración. Lo está haciendo al final, por lo tanto, solo tiene un elemento en su matriz.Haciendo cambios mínimos, su código puede arreglarse:
let ArrOfStrs = ["aaabbbccc", "dddeeefff", "ggghhhiii", "jkl"]
var repeats=[];
for(let i=0; i< ArrOfStrs.length; i++) {
var obj={}
for(let x = 0; x < ArrOfStrs[i].length; x++) {
var l = ArrOfStrs[i].charAt(x);
obj[l] = (!obj.hasOwnProperty(l) ? 1 : obj[l] + 1);
}
repeats.push(obj);
}
console.log(repeats);