Heim >Web-Frontend >js-Tutorial >Wie kann man in JavaScript effizient kartesische Produkte aus Arrays unterschiedlicher Länge generieren?

Wie kann man in JavaScript effizient kartesische Produkte aus Arrays unterschiedlicher Länge generieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-30 01:52:10847Durchsuche

How to Efficiently Generate Cartesian Products from Arrays of Varying Lengths in JavaScript?

Kartesische Produktgenerierung für unterschiedliche Arrays in JavaScript

Um alle möglichen Kombinationen von Elementen aus einem Satz von Arrays mit unterschiedlichen Längen zu generieren, stehen JavaScript-Programmierer vor einer einzigartigen Herausforderung. Das Anpassen einer Lösung für den Umgang mit einer dynamischen Anzahl von Arrays kann schwierig sein.

Ein einfacher und effizienter Ansatz besteht darin, eine rekursive Hilfsfunktion wie die unten dargestellte zu verwenden:

function cartesian(...args) {
  var r = [], max = args.length - 1;
  function helper(arr, i) {
    for (var j = 0, l = args[i].length; j < l; j++) {
      var a = arr.slice(0); // clone arr
      a.push(args[i][j]);
      if (i == max) r.push(a);
      else helper(a, i + 1);
    }
  }
  helper([], 0);
  return r;
}

Um dies zu nutzen Funktion übergeben Sie einfach Ihre Arrays als Argumente:

cartesian([0, 1], [0, 1, 2, 3], [0, 1, 2]);

Die Ausgabe enthält alle möglichen Kombinationen von Elementen aus den bereitgestellten Arrays:

[
  [0, 0, 0],
  [0, 0, 1],
  [0, 0, 2],
  [0, 1, 0],
  [0, 1, 1],
  [0, 1, 2],
  [0, 2, 0],
  [0, 2, 1],
  [0, 2, 2],
]

Passen Sie für ein Array von Arrays die Signatur der Funktion an die Funktion kartesisch(args) an, anstatt Restparameter zu verwenden. Dieser Ansatz ermöglicht die Handhabung einer beliebigen Anzahl von Arrays mit unterschiedlicher Elementanzahl und bietet so eine flexible Lösung für dieses kombinatorische Problem.

Das obige ist der detaillierte Inhalt vonWie kann man in JavaScript effizient kartesische Produkte aus Arrays unterschiedlicher Länge generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn