I've seen several similar questions about how to generate all possible combinations of elements in an array. But I'm having a very hard time figuring out how to write an algorithm that will only output combination pairs. Any suggestions would be super appreciated!
Starting with the following array (with N elements):
var array = ["apple", "banana", "lemon", "mango"];
And getting the following result:
var result = [ "apple banana" "apple lemon" "apple mango" "banana lemon" "banana mango" "lemon mango" ];
I was trying out the following approach but this results in all possible combinations, instead only combination pairs.
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); } }
Add a Custom Column to and name it List1. Enter the formula =List1. Expand out the new List1 column and then Close & Load the query to a table. The table will have all the combinations of items from both lists and we saved on making a custom column in List1 and avoided using a merge query altogether!
Here are some functional programming solutions:
Using EcmaScript2019's flatMap
:
var array = ["apple", "banana", "lemon", "mango"]; var result = array.flatMap( (v, i) => array.slice(i+1).map( w => v + ' ' + w ) ); console.log(result);
Before the introduction of flatMap
(my answer in 2017), you would go for reduce
or [].concat(...)
in order to flatten the array:
var array = ["apple", "banana", "lemon", "mango"]; var result = array.reduce( (acc, v, i) => acc.concat(array.slice(i+1).map( w => v + ' ' + w )), []); console.log(result);
Or:
var array = ["apple", "banana", "lemon", "mango"]; var result = [].concat(...array.map( (v, i) => array.slice(i+1).map( w => v + ' ' + w )) ); console.log(result);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With