Javascript - Générer toutes les combinaisons d'éléments dans un tableau unique (par paires)
J'ai vu plusieurs questions similaires sur la façon de générer toutes les combinaisons possibles d'éléments dans un tableau. Mais je vais avoir un moment très difficile de trouver comment écrire un algorithme qui n'affichera que la combinaison paires. Toute suggestion serait super apprécié!
En commençant par le tableau suivant (avec N éléments):
var array = ["apple", "banana", "lemon", "mango"];
Et d'obtenir le résultat suivant:
var result = [
"apple banana"
"apple lemon"
"apple mango"
"banana lemon"
"banana mango"
"lemon mango"
];
J'ai essayé la méthode suivante, mais cette résultats dans toutes les combinaisons possibles, plutôt que seule une combinaison de paires.
var letters = splSentences;
var combi = [];
var temp= "";
var letLen = Math.pow(2, letters.length);
for (var i = 0; i < letLen ; i++){
temp= "";
for (var j=0;j<letters.length;j++) {
if ((i & Math.pow(2,j))){
temp += letters[j]+ " "
}
}
if (temp !== "") {
combi.push(temp);
}
}
Vous devez vous connecter pour publier un commentaire.
Un moyen simple serait de faire une double boucle sur le tableau où vous passez la première
i
éléments dans la deuxième boucle.JS:
Réécrit avec ES5:
JS:
Voici quelques de la programmation fonctionnelle solutions:
À l'aide de EcmaScript2019 de
flatMap
:JS:
Avant l'introduction de
flatMap
(ma réponse en 2017), vous pourrait aller pourreduce
ou[].concat(...)
afin d'aplatir le tableau:JS:
Ou:
JS:
concat()
. 😀flatMap()
afin de ne pas avoir de tableaux imbriqués de sous-ensembles:result = [...array.flatMap((v1,i) => array.slice(i+1).map(v2 => v1+' '+v1))]
flatMap
n'était pas encore largement disponibles. NB: ici, il n'est pas nécessaire pour diffuser le résultat deflatMap
.Bien que des solutions ont été trouvées, je poste ici un algorithme pour le cas général pour trouver toutes les combinaisons de taille
n
dem (m>n)
éléments. Dans votre cas, nous avonsn=2
etm=4
.JS:
À l'aide de
map
etflatMap
suivantes peuvent être faites (flatMap
est uniquement pris en charge sur chrome et firefox)Essayez ceci:
https://jsfiddle.net/e2dLa9v6/
Générer des combinaisons d'éléments dans un tableau est un peu comme de comptage dans un système de numération,
où la base est le nombre d'éléments dans votre tableau (si vous compte pour les zéros qui seront manquantes).
Cela vous donne tous les indices de votre tableau (concaténés):
Vous êtes uniquement intéressé par paires de deux afin de restreindre les résultats en conséquence:
Maintenant ce qui vous reste à faire est la carte des indices de valeurs.
Que vous ne voulez pas les éléments appariés avec eux-mêmes et de l'ordre n'a pas d'importance,
ceux qui ont besoin d'être retiré, avant de cartographie pour le résultat final.
JS:
Avec plus de dix éléments,
toString()
sera de retour des lettres pour les indices; aussi, cela ne fonctionnera que jusqu'à 36 Éléments.