nodejs中数组之间的所有可能组合

时间:2016-10-27 12:59:17

标签: arrays node.js algorithm

假设我有三个阵列:

var arr1 = ['red', 'orange', 'yellow',];
var arr2 =  ['car', 'bus'];
var arr3 =  ['china'];

如何获得以下组合:
1.订单事项,
2.每个结果(可以是一个数组)应该包含每个arr的0..1元素 3. arr1,arr2,arr3的元素可以出现0..1次:

red,car,china
red,china,car
car,red,china
car,china,red
china,car,red,
china,red,car

red,bus,china
red,china,bus
bus,red,china
bus,china,red
china,bus,red,
china,red,bus

orange,car,china
orange,china,bus
bus,orange,china
bus,china,orange
china,bus,orange,
china,orange,bus

orange,bus,china
orange,china,bus
bus,orange,china
bus,china,orange
china,bus,orange,

yellow,car,china
yellow,china,car
car,yellow,china
car,china,yellow
china,car,yellow,
china,yellow,car


yellow,bus,china
yellow,china,bus
bus,yellow,china
bus,china,yellow
china,bus,yellow,
china,yellow,bus

red,car
car,red

red,bus
bus,red

orange,car
car,orange,

orange,bus
bus,orange,

yellow,car
car,yellow,

yellow,bus
bus,yellow,

red,china
china,red,

orange,china
china,orange,

yellow,china
china,yellow,

car,china
china,car,

bus,china
china,bus,

red, 
orange, 
yellow, 
car, 
bus, 
china, 

我无法弄清楚如何控制每个arr元素中的出现次数,我的代码如下:

function get_titles_appearances(titles_columns) {
    titles_columns = titles_columns || [];
    var n = titles_columns.length;
    if (n === 0) { return [] }
    if (n === 1) { return titles_columns[0] }

    var save = function () {
        var m = groups.length, c = [];
        while (m--) { c[m] = groups[m] }
        rtn.push(c);
    }
    var i = 0, len = 0, counter = [], groups = [], rtn = [];

    for (; i < n; i++) {
        counter[i] = 0;
        groups[i] = titles_columns[i][0];
    }
    save();

    while (true) {
        i = n - 1, len = titles_columns[i].length;
        if (++counter[i] >= len) {
            while (counter[i] >= len) {
                if (i === 0) { return rtn }
                groups[i] = titles_columns[i][0];
                counter[i--] = 0;
                counter[i]++;
                len = titles_columns[i].length;
            }
        }
        groups[i] = titles_columns[i][counter[i]];
        save();
    }
    }

                _.forEach(get_titles_appearances(titles_columns_config_default), function (value) {
                    // titles_appearances.push(  _.join(value, '')+"':'"+_.join(value, ','))
                    titles_appearances = titles_appearances+"{"+ _.join(value, '')+":"+_.join(value, ',')+"},"
                })
        titles_columns_config_default refer to [arr1,arr2,arr3]

0 个答案:

没有答案