javascript中具有嵌套数组和非数值的笛卡尔积

javascript中具有嵌套数组和非数值的笛卡尔积,javascript,underscore.js,cartesian-product,Javascript,Underscore.js,Cartesian Product,我有以下代码: filters = [ { "see":false, "make":true, "means":true, }, { "less":false, "up3":false, "up6":false, "all":true,

我有以下代码:

     filters = [
          { 
            "see":false,
            "make":true,
            "means":true,
          },
          {
            "less":false,
            "up3":false,
            "up6":false,
            "all":true,
            "more":false,
            "var":false
          },
          {
            "one":false,
            "small":true,
            "medium":false,
            "large":false
          }
        ];

    function cartesianProductOf() {
        return _.reduce(arguments, function(a, b) {
            return _.flatten(_.map(a, function(x) {
                return _.map(b, function(y) {
                    return x.concat([y]);
                });
            }), true);
        }, [ [] ]);
    }

    function cleaning(collection){
        var r = [];
        _.each(collection,function(element,index){
            r[index] = [];

            if(_.isObject(element)){ 
                r[index] = _.map(element,function(val,key){ 
                    if(val) return key; 
                }); 
            }
            r[index] = _.compact(r[index]);

        });
        return r;
    }


    // cleaning is producing following array 
    // [["make","means"],["all"],["small"]] 

    clean = cleaning(filters);
    prod = cartesianProductOf(clean);

    $('#result').append(JSON.stringify(  prod ));
我期待的结果大致如下:[[make,all,small],[means,all,small]]

但我得到的是[[make,means]]、[[all]]、[[small]]]

笛卡尔积算法如下所示:

这是我的小提琴: 任何想法都将不胜感激。

简言之:

换成

prod = cartesianProductOf.apply(null, clean);
错误在哪里:

答案很简单,您遇到了典型的类型动态语言问题,cartesianProductOf在参数中等待数组,这意味着所有数组都应该在逗号分隔的括号中传递:

cartesianProductOf(["make","means"],["all"],["small"])
但您只传递一个参数,即列表列表

cartesianProductOf([["make","means"],["all"],["small"]])

函数确实应该返回初始数组,因为一个数组的笛卡尔积就是该数组

谢谢!这是多么明显的错误啊。