Maison >interface Web >js tutoriel >Comment générer toutes les combinaisons (produit cartésien) de valeurs dans des tableaux JavaScript ?

Comment générer toutes les combinaisons (produit cartésien) de valeurs dans des tableaux JavaScript ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 21:05:29428parcourir

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

Produit cartésien des valeurs de tableau JavaScript

Problème :

Étant donné un nombre arbitraire de JavaScript des tableaux de différentes longueurs, déterminent toutes les combinaisons (produit cartésien) de leurs valeurs.

Solution :

Cette tâche peut être résolue efficacement en utilisant la récursivité. Cela implique de parcourir chaque tableau et de combiner ses valeurs avec toutes les combinaisons possibles des tableaux restants.

Considérez l'implémentation suivante :

function allPossibleCases(arr) {
  if (arr.length === 1) {
    return arr[0];
  } else {
    const result = [];
    const casesOfRest = allPossibleCases(arr.slice(1));  // recur with the rest of arr
    casesOfRest.forEach((c) => {
      for (let i = 0; i < arr[0].length; i++) {
        result.push(arr[0][i] + c);
      }
    });
    return result;
  }
}

Utilisation :

var allArrays = [['a', 'b'], ['c'], ['d', 'e', 'f']];
var results = allPossibleCases(allArrays); // outputs ["acd", "bcd", "azd", ...]

Explication :

  • La fonction allPossibleCases prend un tableau de tableaux en entrée.
  • Si le tableau d'entrée n'a qu'un seul sous-tableau , il renvoie ses valeurs.
  • Sinon, il s'appelle récursivement avec les sous-tableaux restants et combine chaque valeur de sous-tableau avec toutes les combinaisons possibles des sous-tableaux restants.
  • La fonction parcourt chaque sous-tableau et concatène ses valeurs avec chaque combinaison des tableaux restants, générant toutes les combinaisons possibles.
  • Le résultat final est un tableau de chaînes contenant toutes les combinaisons uniques de valeurs des tableaux d'entrée.

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