Tengo una cadena "abacabad" que se pasa a mi función como s
Lo que quiero hacer:
Lo que mi código está registrando:
Conjunto (0) { a: 1, b: 1, c: 1, d: 1 }
lo que debería estar registrando:
Conjunto (0) { a: 4, b: 2, c: 1, d: 1 }
function solution(s) { arr = new Set() for (e of s) { if (e in arr) { arr[e]++; } if (arr.has(e) == false) { arr[e] = 1; } } console.log(arr) } solution('abacabad');Un Set es una colección de elementos únicos. No es una tienda de Map (clave/valor).
Hay toneladas de problemas en ese código, así que no los enumeraré todos, pero simplemente no está usando el tipo correcto de objeto y luego está mezclando API, en particular definiendo claves de objetos mezclados con la API del Set real.
function solution(s) { const countByChar = new Map(); for (char of s) { const count = countByChar.get(char) || 0; countByChar.set(char, count + 1); } return countByChar; } const countByChar = solution('abacabad'); console.log(Array.from(countByChar.entries()));Estás combinando dos estructuras de datos diferentes:
('a, 'b', 'c', 'd') , y{ a: 1, b: 2 } ) Los métodos de configuración incluyen .has y .add . Pero los conjuntos también son objetos, por lo que también puede usar la asignación de propiedades de objetos estándar en ellos, pero no debería hacerlo . Si desea un conjunto, use métodos de conjunto (y solo métodos de conjunto) para recopilar datos sobre él. Aquí, está colocando una propiedad directamente en el objeto Set (con arr[e] = ), pero está usando el método Set .has , que verifica algo completamente diferente. .add has analiza los valores en la estructura de datos interna del Conjunto (no visible por ningún otro mecanismo que no sean otros métodos del Conjunto), y nunca usa .add , por lo que su Conjunto nunca recibe ningún valor.
Un conjunto no funcionará bien aquí de todos modos, porque desea una colección de pares clave-valor, no solo una colección de valores. En su lugar, utilice un objeto estándar o un mapa.
function solution(s) { const obj = {}; for (const char of s) { obj[char] ??= 0; obj[char]++; } console.log(obj); } solution('abacabad');Si quisieras un mapa:
function solution(s) { const map = new Map(); for (const char of s) { map.set( char, (map.get(char) || 0) + 1 ); } console.log([...map.entries()]); } solution('abacabad');