find all combinations from array
npm install combinationsCombinations 
============
npm install combinations
combinations(array[, min_output_array_size])
* takes in an array, and outputs an array of arrays, containing all possible combinations of values in the original array.
* combinations are of all sizes: all combinations of one element, and all combinations of 2 elements, and so on
* minimum number of elements in a combination can be specified (min_output_array_size)
* maximum number of elements in a combination can be also specified
* if maximum combination value is bigger than array elements it will be overridden to the array length
var combinations = require('combinations');
var myArray = ['red', 'orange', 'yellow', 'green'];
combinations(myArray);
//Output:
// [ [ 'red' ], [ 'orange' ],
// [ 'yellow' ], [ 'green' ],
// [ 'red', 'orange' ], [ 'red', 'yellow' ],
// [ 'red', 'green' ], [ 'orange', 'yellow' ],
// [ 'orange', 'green' ], [ 'yellow', 'green' ],
// [ 'red', 'orange', 'yellow' ], [ 'red', 'orange', 'green' ],
// [ 'red', 'yellow', 'green' ], [ 'orange', 'yellow', 'green' ],
// [ 'red', 'orange', 'yellow', 'green' ] ]
combinations(myArray, 2);
//Output:
// [ [ 'red', 'orange' ], [ 'red', 'yellow' ],
// [ 'red', 'green' ], [ 'orange', 'yellow' ],
// [ 'orange', 'green' ], [ 'yellow', 'green' ],
// [ 'red', 'orange', 'yellow' ], [ 'red', 'orange', 'green' ],
// [ 'red', 'yellow', 'green' ], [ 'orange', 'yellow', 'green' ],
// [ 'red', 'orange', 'yellow', 'green' ] ]
combinations(myArray, 2, 3);
//Output:
// [ [ 'red', 'orange' ], [ 'red', 'yellow' ],
// [ 'red', 'green' ], [ 'orange', 'yellow' ],
// [ 'orange', 'green' ], [ 'yellow', 'green' ],
// [ 'red', 'orange', 'yellow' ], [ 'red', 'orange', 'green' ],
// [ 'red', 'yellow', 'green' ], [ 'orange', 'yellow', 'green' ] ]