Maison >interface Web >js tutoriel >Comment générer efficacement des produits cartésiens à partir de tableaux de longueurs variables en JavaScript ?

Comment générer efficacement des produits cartésiens à partir de tableaux de longueurs variables en JavaScript ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 01:52:10769parcourir

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

Génération de produits cartésiens pour des tableaux variables en JavaScript

Pour générer toutes les combinaisons possibles d'éléments tirés d'un ensemble de tableaux de longueurs variables, les programmeurs JavaScript sont confrontés à un défi unique. Personnaliser une solution pour gérer un nombre dynamique de tableaux peut être délicat.

Une approche simple et efficace consiste à utiliser une fonction d'assistance récursive comme celle illustrée ci-dessous :

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

Pour l'utiliser fonction, transmettez simplement vos tableaux comme arguments :

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

La sortie contiendra toutes les combinaisons possibles d'éléments à partir des éléments fournis 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],
]

Pour un tableau de tableaux, ajustez la signature de la fonction sur la fonction cartésienne (args) au lieu d'utiliser les paramètres de repos. Cette approche permet de gérer n'importe quel nombre de tableaux avec un nombre d'éléments variable, offrant ainsi une solution flexible à ce problème combinatoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn