Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Menjana Semua Gabungan (Produk Cartesian) Nilai daripada Tatasusunan JavaScript?

Bagaimana untuk Menjana Semua Gabungan (Produk Cartesian) Nilai daripada Tatasusunan JavaScript?

DDD
DDDasal
2024-11-03 16:19:02690semak imbas

How to Generate All Combinations (Cartesian Product) of Values from JavaScript Arrays?

Mencari Semua Gabungan (produk Cartesian) Nilai Tatasusunan JavaScript

Menghasilkan semua gabungan nilai daripada berbilang tatasusunan dalam JavaScript boleh dicapai melalui konsep produk Cartesian. Begini cara anda boleh mendekatinya:

Rekursi untuk Produk Cartesian


Untuk menjana semua kombinasi, kita boleh menggunakan fungsi rekursif yang berulang melalui setiap tatasusunan dan menggabungkan elemen daripada semua tatasusunan.

Berikut ialah contoh fungsi rekursif yang mencari hasil darab Cartesian bagi berbilang tatasusunan:



< ;pre class="snippet-code-js lang-js prettyprint-override">function allPossibleCases(arr) {
if (arr.length == 1) {

return arr[0];

} else {

var result = [];
var allCasesOfRest = allPossibleCases(arr.slice(1)); // recur with the rest of array
for (var i = 0; i < allCasesOfRest.length; i++) {
  for (var j = 0; j < arr[0].length; j++) {
    result.push(arr[0][j] + allCasesOfRest[i]);
  }
}
return result;

}
}



Contoh Penggunaan


Katakan anda mempunyai tiga tatasusunan:

var first = ['a', 'b'], <br>var second = ['c'],<br>var third = ['d', 'e', ​​'f'];

Menggunakan fungsi allPossibleCases, anda boleh menjana semua kombinasi seperti berikut:




var allArrays = [first, second, third];<br>console.log(allPossibleCases(allArrays));



Ini akan mengeluarkan gabungan berikut:

acd
ace
acf
bcd
bce
bcf
azd
aze
azf
bzd
bze
bzf

Nota: Susunan elemen dalam setiap gabungan mungkin berbeza bergantung pada susunan tatasusunan dalam pembolehubah allArrays.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Semua Gabungan (Produk Cartesian) Nilai daripada Tatasusunan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn