Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Menjana Produk Cartesian dengan Cekap daripada Susunan Pelbagai Panjang dalam JavaScript?

Bagaimana untuk Menjana Produk Cartesian dengan Cekap daripada Susunan Pelbagai Panjang dalam JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-11-30 01:52:10769semak imbas

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

Penjanaan Produk Cartesian untuk Mempelbagaikan Tatasusunan dalam JavaScript

Untuk menjana semua kemungkinan gabungan elemen yang diambil daripada set tatasusunan dengan panjang yang berbeza-beza, pengaturcara JavaScript menghadapi cabaran yang unik. Menyesuaikan penyelesaian untuk mengendalikan bilangan dinamik tatasusunan boleh menjadi rumit.

Pendekatan yang mudah dan cekap ialah menggunakan fungsi pembantu rekursif seperti yang digambarkan di bawah:

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;
}

Untuk menggunakan ini fungsi, hanya hantar tatasusunan anda sebagai argumen:

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

Output akan mengandungi semua kemungkinan gabungan elemen daripada yang disediakan tatasusunan:

[
  [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],
]

Untuk tatasusunan tatasusunan, laraskan tandatangan fungsi untuk berfungsi cartesian(args) dan bukannya menggunakan parameter rehat. Pendekatan ini membolehkan untuk mengendalikan sebarang bilangan tatasusunan dengan kiraan elemen yang berbeza-beza, memberikan penyelesaian yang fleksibel kepada masalah gabungan ini.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Produk Cartesian dengan Cekap daripada Susunan Pelbagai Panjang dalam 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