Actualmente, tengo una matriz como esa:
var uniqueCount = Array();
Después de algunos pasos, mi matriz se ve así:
uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];
¿Cómo puedo contar cuántos a, b, c hay en la matriz? Quiero tener un resultado como:
a = 3
b = 1
c = 2
d = 2
etc.
javascript
arrays
detno29
fuente
fuente
{}
, no a la programación funcionalmap
.Respuestas:
Violín de demostración
También puede utilizar funciones de orden superior para realizar la operación. Ver esta respuesta
fuente
for (var i = 0; i <= array_elements.length; i++) {
o en<=
lugar de<
.fuente
counts[x] || 0
devuelve el valor decounts[x]
si está establecido, de lo contrario0
. Luego, simplemente agregue uno y configúrelo nuevamente en el objeto y el conteo está listo.reduce
:var counts = your_array.reduce((map, val) => {map[val] = (map[val] || 0)+1; return map}, {} );
Algo como esto:
Use un bucle for simple en lugar de forEach si no desea que esto se interrumpa en los navegadores más antiguos.
fuente
uniqueCount.forEach(function(value, index) { count[value] = (count[value] || 0) + 1; });
Me encontré con esta pregunta (muy antigua). Curiosamente, falta la solución más obvia y elegante (en mi humilde opinión): Array.prototype.reduce (...) . Todos los navegadores principales admiten esta función desde aproximadamente 2011 (IE) o incluso antes (todos los demás):
fuente
Línea única basada en la función de matriz de reducción
fuente
Lo simple es mejor, una variable, una función :)
fuente
Creo que esta es la forma más sencilla de contar ocurrencias con el mismo valor en la matriz.
fuente
fuente
Nadie que responda parece estar usando el
Map()
integrado para esto, que tiende a ser mi opción combinada conArray.prototype.reduce()
:Nb, tendrá que polyfill
Map()
si desea usarlo en navegadores más antiguos.fuente
get
y lasset
funciones provienen delMap
objeto. Pero el acumulador inicial no es un objeto Map, entonces, ¿por qué la versión reducida del reductor toma uno?Map
objeto; ver el segundo argumento de la reducción.Map.prototype.set
devuelve el objeto de mapa yMap.prototype.get
devuelveundefined
o el valor de cualquier clave que se le proporcione. Esto nos permite obtener el recuento actual de cada letra (o0
si no está definido), luego incrementarlo en uno, luego establecer el recuento de esa letra en el nuevo recuento, que devuelve el mapa y se convierte en el nuevo valor acumulador.Puede tener un objeto que contenga recuentos. Camine sobre la lista e incremente el recuento de cada elemento:
fuente
counts[element] || 0
?counts[element]
devolucionesundefined
ya que la propiedad aún no tiene valor. Si luego intentas agregarundefined + 1
, terminarás con NaN . El(count[element] || 0)
reemplazará elundefined
por0
lo que agregar1
produce en1
lugar deNaN
. ECMAScript 2020 agrega el operador de fusión nula??
que hace algo similar pero es un poco más explícito que está usando el segundo valor cuando el primero esundefined
(onull
). Esa versión sería(counts[element] ?? 0) + 1
.Puede resolverlo sin usar ningún bucle for / while ou forEach.
¡Espero que te ayude!
fuente
fuente
Puedes hacer algo como eso:
ahora tienes un mapa con todos los personajes contados
fuente
fuente
Duplica en una matriz que contiene alfabetos:
Duplica en una matriz que contiene números:
fuente
var testArray = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h ',' h ',' h ',' e ',' a '];
fuente
fuente
sheet.js simplificado answare
fuente
Una combinación de buenas respuestas:
Espero que sea de ayuda.
fuente
}
fuente
Al usar array.map podemos reducir el ciclo, vea esto en jsfiddle
Probar:
fuente
fuente
Cree un archivo, por ejemplo,
demo.js
y ejecútelo en la consola con el nododemo.js
y obtendrá la aparición de elementos en forma de matriz.Obtendrá el resultado en la consola de la siguiente manera:
fuente
La manera mas rapida:
La complejidad computacional es O (n).
El código más corto:
Utilice ES6.
fuente
fuente
Declare un objeto
arr
para contener el conjunto único como claves. Rellenararr
por bucle a través de la matriz de una vez usando el mapa. Si la clave no se ha encontrado previamente, agregue la clave y asigne un valor de cero. En cada iteración, incremente el valor de la clave.Dado testArray:
solución:
JSON.stringify(arr)
saldráObject.keys(arr)
volverá["a","b","c","d","e","f","g","h"]
Para encontrar las apariciones de cualquier elemento, por ejemplo, b
arr['b']
generará2
fuente
Es simple en javascript usando el método de reducción de matriz:
fuente
Uso:
CÓDIGO:
Retazo
fuente