在 Javascript 中从数组中获取所有元素组合
function getCombinations(params, combinationsResults){
if(params.length == 0) return combinationsResults;
var head = params[0];
var tail = params.slice(1);
var combinationsResultsCurrent = [];
if(Array.isArray(head)){
_.uniq(head).forEach(function(item){
if(combinationsResults.length == 0){
combinationsResultsCurrent.push(item);
} else {
combinationsResults.forEach(function(previousResultItem){
combinationsResultsCurrent.push(previousResultItem.concat([item]));
});
}
});
} else {
if(combinationsResults.length == 0){
combinationsResultsCurrent.push(head);
} else {
combinationsResults.forEach(function(previousResultItem){
combinationsResultsCurrent.push([previousResultItem].concat([head]));
});
}
}
return getCombinations(tail, combinationsResultsCurrent);
例:
假设我们有一个带有 IN caluses 的查询:
SELECT * FROM custom_table WHERE user_id = 'user1' AND location IN ('home', 'work', AND date IN ('2017-01-10', '2017-01-11'))
并且希望获得所有参数组合以在没有 IN 条件的情况下生成查询:
SELECT * FROM custom_table WHERE user_id = [value for user_id] AND location = [value for possible location] AND date = [value for possible date]
为了获得等效查询的所有可能的参数组合,我们可以运行上面的函数:
var params = ['user1', ['home', 'work'], ['2017-01-10', '2017-01-11']];