JavaScript - Generierung von Kombinationen aus n-Reihen mit m-Elementen
Bin ich Schwierigkeiten haben, kommen mit code zu generieren Kombinationen von n Anzahl von arrays mit m die Anzahl der Elemente in Ihnen, in JavaScript. Ich habe gesehen, ähnliche Fragen über dieses für andere Sprachen, aber die Antworten integrieren syntaktischen oder die Bibliothek, die Magie, die ich bin mir nicht sicher wie das zu übersetzen.
Betrachten Sie diese Daten:
[[0,1], [0,1,2,3], [0,1,2]]
3 arrays mit einer unterschiedlichen Anzahl von Elementen in Ihnen. Was ich will zu tun ist, erhalten alle Kombinationen durch die Kombination ein Element aus jedem array.
Beispiel:
0,0,0 //item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2
Und so weiter.
Wenn die Anzahl der arrays wurden behoben, es würde leicht sein, um eine hartcodierte Umsetzung. Aber die Anzahl der arrays kann variieren:
[[0,1], [0,1]]
[[0,1,3,4], [0,1], [0], [0,1]]
Jede Hilfe wäre sehr geschätzt werden.
Einfachste Weg, um finden die Kombinationen stackoverflow.com/a/52098701/8024633
InformationsquelleAutor quano | 2013-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine ganz einfache und kurze mit einer rekursiven Hilfsfunktion:
Verwendung:
Um die Funktion nutzen ein array von arrays, ändern Sie einfach die Signatur zu
function cartesian(arg)
so dassarg
ist ein parameter, der anstelle von allearguments
.Ah, ich bemerkte einen Fehler in der benchmark. Hier aktualisiert: jsfiddle.net/2xt5F . Es dauert etwa 0,6 Sekunden.
Dies ist ähnlich zu dem Ansatz, den ich ursprünglich nahm, aber konnte es nicht erreichen... Ein wenig Schlaf entzogen, die von einem neuen baby, aber froh, dass jemand es getan hat, so konnte ich sehen!!
Sieht so aus, ich werde zu deinem fan. Du bist genial.
Obwohl die Geigen benchmark @Neob91 Antwort als die am schnellsten für mich, diesem jsperf scheint zu suggerieren, dass diese Antwort am schnellsten: jsperf.com/array-combos
InformationsquelleAutor Bergi
Nachdem ich ein wenig Forschung, entdeckte ich eine frühere Verwandte Frage:
Suche Alle Kombinationen von JavaScript-array-Werten
Habe ich angepasst, einige der code von dort, so dass es gibt ein array von arrays, die alle Permutationen:
Habe ich eine Arbeitskopie http://jsfiddle.net/7EakX/, der nimmt das array, das Sie früher gab ([[0,1], [0,1,2,3], [0,1,2]]) und gibt das Ergebnis an den browser-Konsole.
InformationsquelleAutor Neil Mountford
Nur zum Spaß, hier ist eine funktionale Variante der Lösung in meiner ersten Antwort:
Alternative, für volle Geschwindigkeit können wir dynamisch kompilieren unserer eigenen loops:
InformationsquelleAutor Bergi
Ich bin froh, Ihnen zu helfen, und freut sich, dass es effizient ist. 😉
InformationsquelleAutor Neob91
Hier ist ein weiterer Weg, es zu tun. Ich behandle die Indizes aller arrays wie eine Zahl, deren Ziffern alle Verschieden Basen (wie z.B. Zeit und Datum), über die Länge des Arrays als die radix.
So, mit Ihrem ersten Satz von Daten, die erste Ziffer ist die Basis 2, die zweite Basis ist 4 und die Dritte base 3. Der Zähler beginnt mit 000, dann geht 001, 002, dann 010. Die Ziffern entsprechen die Indizes in den arrays, und da die Reihenfolge bewahrt wird, ist dies kein problem.
Ich habe eine Geige mit ihm, hier zu arbeiten: http://jsfiddle.net/Rykus0/DS9Ea/1/
und hier ist der code:
Ausgezeichnet! Danke für Durchführung der Tests. Ich Frage mich, wie man es durchführen würde, und hatte nicht allzu viel Gedanken in diesem Aspekt. Dies ist ein lustiges kleines problem zu lösen, so könnte ich es geben ein anderes gehen.
InformationsquelleAutor Tom Pietrosanti