Javascript复杂分组

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

我需要帮助,弄清楚如何循环源对象以获得输出字符串。我目前有一些嵌套的for循环,但我最终错过了其中一个组合,或者得到了太多。类别和过滤器的数量将有所不同

源对象

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:输出字符串是预期的结果。阿杜奇:顺序没有多大关系,我想避免重复组合,谢谢!这很有效。我需要递归,这正是我所缺少的,也是它让我陷入循环的原因:)