Javascript复杂分组
我需要帮助,弄清楚如何循环源对象以获得输出字符串。我目前有一些嵌套的for循环,但我最终错过了其中一个组合,或者得到了太多。类别和过滤器的数量将有所不同 源对象Javascript复杂分组,javascript,grouping,nested-loops,Javascript,Grouping,Nested Loops,我需要帮助,弄清楚如何循环源对象以获得输出字符串。我目前有一些嵌套的for循环,但我最终错过了其中一个组合,或者得到了太多。类别和过滤器的数量将有所不同 源对象 var Source = {Cat1:{Filter1:'f1',Filter2:'f2'}, Cat2:{Filter3:'f3',Filter4:'f4'}, Cat3:{Filter5:'f5'}}; 输出字符串 Filter1 Filter3 Filter5, Filte
var Source = {Cat1:{Filter1:'f1',Filter2:'f2'},
Cat2:{Filter3:'f3',Filter4:'f4'},
Cat3:{Filter5:'f5'}};
输出字符串
Filter1 Filter3 Filter5,
Filter1 Filter4 Filter5,
Filter2 Filter3 Filter5,
Filter2 Filter4 Filter5
尝试此操作,将返回数组的数组:
function cartesianProduct(paramArray) {
function addTo(curr, args) {
var i, copy,
rest = args.slice(1),
last = !rest.length,
result = [];
for (i = 0; i < args[0].length; i++) {
copy = curr.slice();
copy.push(args[0][i]);
if (last) {
result.push(copy);
} else {
result = result.concat(addTo(copy, rest));
}
}
return result;
}
return addTo([], Array.prototype.slice.call(arguments));
};
var Source = {Cat1:{Filter1:'f1',Filter2:'f2'},
Cat2:{Filter3:'f3',Filter4:'f4'},
Cat3:{Filter5:'f5'}};
// var cats = [];
var filters = [];
for(var c in Source) {
filters.push([]);
for(var f in Source[c])
filters[filters.length - 1].push(f);
}
console.log(cartesianProduct.apply(this || window, filters));
函数cartesianProduct(paramArray){
函数addTo(curr,args){
var i,收到,
剩余=参数切片(1),
last=!rest.length,
结果=[];
对于(i=0;i
HTH预期结果是什么?因为您有一个源对象和一个输出字符串,但是预期的是什么,你想用它做什么。根据我的理解,这里的目标是通过从每个catJonathan176中选择1来提取所有可能的过滤器组合。但是我有一个问题:输出的顺序重要吗?Niels:输出字符串是预期的结果。阿杜奇:顺序没有多大关系,我想避免重复组合,谢谢!这很有效。我需要递归,这正是我所缺少的,也是它让我陷入循环的原因:)