Atualmente, tenho uma matriz como esta:
var uniqueCount = Array();
Depois de algumas etapas, meu array fica assim:
uniqueCount = [a,b,c,d,d,e,a,b,c,f,g,h,h,h,e,a];
Como posso contar quantos a, b, c existem na matriz? Eu quero ter um resultado como:
a = 3
b = 1
c = 2
d = 2
etc.
javascript
arrays
detno29
fonte
fonte
{}
, não uma programação funcionalmap
.Respostas:
Demo Fiddle
Você também pode usar funções de ordem superior para fazer a operação. Veja esta resposta
fonte
for (var i = 0; i <= array_elements.length; i++) {
ou em<=
vez de<
.fonte
counts[x] || 0
retorna o valor decounts[x]
se for definida, caso contrário0
. Em seguida, basta adicionar um e configurá-lo novamente no objeto e a contagem é feita.reduce
:var counts = your_array.reduce((map, val) => {map[val] = (map[val] || 0)+1; return map}, {} );
Algo assim:
Use um loop for simples em vez de forEach se você não quiser que isso pare em navegadores mais antigos.
fonte
uniqueCount.forEach(function(value, index) { count[value] = (count[value] || 0) + 1; });
Eu tropecei nesta questão (muito antiga). Curiosamente, a solução mais óbvia e elegante (imho) está faltando: Array.prototype.reduce (...) . Todos os principais navegadores oferecem suporte a esse recurso desde cerca de 2011 (IE) ou mesmo antes (todos os outros):
fonte
Linha única com base na função de redução de matriz
fonte
Simples é melhor, uma variável, uma função :)
fonte
Acho que essa é a maneira mais simples de contar ocorrências com o mesmo valor no array.
fonte
fonte
Ninguém está respondendo parece estar usando o
Map()
integrado para isso, que tende a ser meu recurso combinado comArray.prototype.reduce()
:Nb, você terá que polyfill
Map()
se quiser usá-lo em navegadores mais antigos.fonte
get
e asset
funções estão vindo doMap
objeto. Mas o acumulador inicial não é um objeto Map, então por que a versão reduzida do redutor leva um?Map
objeto; veja o segundo argumento da redução.Map.prototype.set
retorna o objeto do mapa eMap.prototype.get
retornaundefined
ou o valor de qualquer chave fornecida a ele. Isso nos permite obter a contagem atual de cada letra (ou0
se indefinida), incrementar em um e definir a contagem dessa letra para a nova contagem, que retorna o mapa e se torna o novo valor do acumulador.Você pode ter um objeto que contém contagens. Percorra a lista e aumente a contagem de cada elemento:
fonte
counts[element] || 0
?Você pode resolvê-lo sem usar nenhum loop for / while ou forEach.
Espero que ajude você!
fonte
fonte
Você pode fazer algo assim:
agora você tem um mapa com a contagem de todos os personagens
fonte
fonte
Duplicatas em uma matriz contendo alfabetos:
Duplicados em uma matriz contendo números:
fonte
var testArray = ['a', 'b', 'c', 'd', 'd', 'e', 'a', 'b', 'c', 'f', 'g', 'h ',' h ',' h ',' e ',' a '];
fonte
fonte
simplified sheet.js answare
fonte
Uma combinação de boas respostas:
Espero que seja útil.
fonte
}
fonte
Usando array.map, podemos reduzir o loop, veja isso em jsfiddle
Testar:
fonte
fonte
Crie um arquivo por exemplo
demo.js
e execute-o no console com o nódemo.js
e você obterá ocorrência de elementos em forma de matriz.Você obterá o resultado no console conforme abaixo:
fonte
Maneira mais rápida:
A complexidade computacional é O (n).
O código mais curto:
Use ES6.
fonte
fonte
Declare um objeto
arr
para conter o conjunto exclusivo como chaves. Preencherarr
percorrendo a matriz uma vez usando o mapa. Se a chave não tiver sido encontrada anteriormente, adicione a chave e atribua um valor zero. Em cada iteração, incremente o valor da chave.Dado testArray:
solução:
JSON.stringify(arr)
irá produzirObject.keys(arr)
retornará["a","b","c","d","e","f","g","h"]
Para encontrar as ocorrências de qualquer item, por exemplo, b
arr['b']
irá imprimir2
fonte
Uso:
CÓDIGO:
Trecho
fonte
É simples em javascript usando o método de redução de matriz:
fonte