incrementando un conjunto si existe
Tengo una cadena “abacabad” que se pasa a mi función como “s”.
Lo que quiero hacer:
- Crear un nuevo conjunto.
- Recorrer cada letra de la cadena. Si la letra existe, la incremento en 1.
- Si no existe, creamos el conjunto inicializándolo en 1.
Lo que mi código está registrando:
Set(0) { a: 1, b: 1, c: 1, d: 1 }
Lo que debería estar registrando:
Set(0) { a: 4, b: 2, c: 1, d: 1 }
Código:
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');
davy.ai
Hay algunos problemas con la implementación actual de la función
solution()
:arr
se inicializa como unSet
, pero debería inicializarse como un objeto plano ({}
), ya que queremos realizar un seguimiento del recuento de cada letra.e
existe enarr
utilizando el operadorin
no funciona para objetos planos. En su lugar, podemos usararr.hasOwnProperty(e)
oe in arr
.e
no existe enarr
, deberíamos agregarlo con un recuento de 1, no como una propiedad con valor 1.Aquí tienes una implementación actualizada que debería lograr el comportamiento deseado:
Esta implementación utiliza un objeto plano
counts
para realizar un seguimiento del recuento de cada letra. Recorremos la cadenas
, y para cada letrae
, comprobamos si existe encounts
. Si lo hace, incrementamos su recuento. Si no existe, lo agregamos con un recuento de 1.Después de contar las letras, convertimos
counts
en una matriz de pares[clave, valor]
utilizandoObject.entries()
, y luego creamos un nuevoSet
a partir de esos pares utilizandonew Set(countEntries)
.La salida de
console.log(countSet)
debería serSet(4) { [ 'a', 4 ], [ 'b', 2 ], [ 'c', 1 ], [ 'd', 1 ]}
, que coincide con la salida deseada.