Zählen der vorkommen / Häufigkeit von array-Elementen
In Javascript, ich versuche es mit einem ersten array von Zahlenwerten und zählen Sie die Elemente im inneren. Idealerweise wäre das Ergebnis zwei neue arrays, die erste Angabe jeweils einzigartiges element, und die zweite, die die Anzahl der Zeiten, die jedes element Auftritt. Jedoch, ich bin offen für Vorschläge, das format der Ausgabe.
Zum Beispiel, wenn das ursprüngliche array wurde:
5, 5, 5, 2, 2, 2, 2, 2, 9, 4
Dann zwei neue Felder angelegt werden. Die erste enthält die Namen der einzelnen einzigartige element:
5, 2, 9, 4
Die zweite enthält die Anzahl der Zeiten, die element auftrat, in den ersten array:
3, 5, 1, 1
Weil die Zahl 5 Auftritt, dreimal in der ersten Arrays, die Zahl 2 tritt fünf mal und 9 und 4 sowohl einmal angezeigt.
Ich gesucht habe viel nach einer Lösung, aber nichts scheint zu funktionieren, und alles, was ich versucht habe, mich hat aufgewickelt wird lächerlich Komplex. Jede mögliche Hilfe würde geschätzt!
Dank 🙂
InformationsquelleAutor der Frage Jack W | 2011-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier gehen Sie:
Live-demo: http://jsfiddle.net/simevidas/bnACW/
InformationsquelleAutor der Antwort Šime Vidas
InformationsquelleAutor der Antwort adamse
Wenn mit Unterstrich oder lodash, das ist die einfachste Sache zu tun:
Mit:
Als von anderen darauf hingewiesen wird, können Sie dann führen Sie die
_.keys()
und_.values()
Funktionen auf das Ergebnis, um nur die eindeutigen zahlen, und Ihre vorkommen, beziehungsweise. Aber in meiner Erfahrung, das original ist viel einfacher zu handhaben.InformationsquelleAutor der Antwort radicand
Nicht verwenden zwei arrays für das Ergebnis, verwenden Sie ein Objekt:
Dann
result
Aussehen wird:InformationsquelleAutor der Antwort mu is too short
Ich denke, dies ist der einfachste Weg, wie zählen der vorkommen mit gleichem Wert in der Reihe.
InformationsquelleAutor der Antwort Dmytro Kozlovskyi
Wenn Sie zugunsten einer einzigen liner.
arr.reduce(function(countMap, word) {countMap[word] = ++countMap[word] || 1;return countMap}, {});
Bearbeiten (6/12/2015):
Die Erklärung von innen heraus.
countMap ist eine Karte, die Karten ein Wort mit seiner Häufigkeit, die wir sehen können, die anonyme Funktion. Was reduziert hat, ist die Funktion anwenden mit Argumenten wie alle array-Elemente und countMap übergeben wird als Rückgabewert der letzten Funktion aufrufen. Der Letzte parameter ({}) ist der default-Wert von countMap für den ersten Aufruf der Funktion.
InformationsquelleAutor der Antwort rjalfa
Wenn Sie Unterstrich, Sie können gehen der funktionale route
so dass Ihre erste array ist
und das zweite array ist
meisten dieser wird standardmäßig auf native javascript-Funktionen, wenn Sie verfügbar sind
demo : http://jsfiddle.net/dAaUU/
InformationsquelleAutor der Antwort jhnstn
ES6-version sollte viel simplificateur (eine weitere Lösung)
Einer Karte statt der einfachen Objekt hilft uns zu unterscheiden, die unterschiedliche Art der Elemente, sonst alle zählen, sind die Basis für Zeichenfolgen
InformationsquelleAutor der Antwort William Leung
Könnte man erweitern der Array-Prototyp, wie diese:
Alternativ können Sie nutzen
Array.map
:InformationsquelleAutor der Antwort KooiInc
Hier ist einfach etwas, das leicht und einfach für die Augen...
Edit: Und da willst du allen vorkommen...
InformationsquelleAutor der Antwort ElDoRado1239
InformationsquelleAutor der Antwort SoEzPz
Schauen Sie sich den code unten.
InformationsquelleAutor der Antwort Wouter van Nifterick
Versuchen Sie dies:
InformationsquelleAutor der Antwort Aamir Afridi
Können Sie diese viel einfacher durch die Erweiterung der arrays mit einem
count
Funktion. Es funktioniert wie eine Art Schiene"Array#count
wenn Sie mit ihm vertraut.Verwendung:
Quelle (gist)
InformationsquelleAutor der Antwort zykadelic
Gegebenes array x
ich.e
x = ['boy','man','oldman','scout','pilot'];
Anzahl der vorkommen eines Elements
'man'
istInformationsquelleAutor der Antwort Shashank Reddy Arrabothu
War ich der Lösung ein ähnliches problem auf codewars und ersann folgende Lösung, die für mich gearbeitet hat.
Dadurch höchste Anzahl von einem integer in ein array und auch die ganze Zahl selbst. Ich denke, es kann angewendet werden, um string-array.
Richtig Sortieren von Zeichenfolgen, entfernen Sie die
function(a, b){return a-b}
aus dem inneren dersort()
TeilInformationsquelleAutor der Antwort Varun Upadhyay
Es ist eine viel bessere und einfache Möglichkeit, wir können dies tun, indem
ramda.js
.Code-Beispiel hier
const ary = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];
R.countBy(r=> r)(ary)
countBy Dokumentation ist bei Dokumentation
InformationsquelleAutor der Antwort Eshwar Prasad Yaddanapudi
In Bezug auf meinen Kommentar gefragt @der Abgesandte über eine Anpassung an seine Lösung. im hinzufügen der Art, wie ich behandelt es:
Was ich hier mache ist, 1. das entfernen der Duplikate und das speichern der array ( distinctArr), dann ich zähle auf das ursprüngliche array (yourArray) die Zeitdauer, die das Objekt dupliziert und das hinzufügen einer 4. Eigenschaft mit dem Wert der vorkommen
Hoffe, es hilft für jemanden der diese spezifische Lösung
Ofc ist es mit ES6
InformationsquelleAutor der Antwort sharon gur
Hier ist eine Möglichkeit zum zählen der vorkommen innerhalb eines Arrays von Objekten. Es stellt auch das erste array die Inhalte in ein neues array, das Sortieren der Werte, so dass die Reihenfolge, in der die ursprüngliche array wird nicht gestört. Dann eine rekursive Funktion verwendet, um zu gehen durch jedes element und zählen Sie die Menge-Eigenschaft für jedes Objekt im array.
InformationsquelleAutor der Antwort nate_js
InformationsquelleAutor der Antwort José Salgado
Hier ist eine klassische old-school-Methode für die Zählung von arrays.
Können Sie Sortieren Sie zuerst, wenn Sie möchten, eine alphabetische Ergebnis, aber wenn Sie wollen, um die Erhaltung der Reihenfolge, in der die Daten eingegeben wurde, dann geben Sie dieses einen Versuch. Nested loops-vielleicht ein wenig langsamer als einige der anderen Methoden auf dieser Seite.
InformationsquelleAutor der Antwort MangoPapa7