JS数组元素的重新组合(两两组合,三三组合........)

代码:

var context = 'a,b,c,d,e,f,g';

var contexts=context .split(',');  //把context 按“,”拆分成数组

for (var a = []; a.push([]) < contexts.length;) ;
    var b = Math.pow(2, contexts.length) - 1;
    for (var i = 1; i <= b; i++) {
        var c = [];
        for (var s = i, k = 0; s > 0; s >>= 1, k++)
            if (s & 1 == 1)
                c.push(contexts[k]);
        a[c.length - 1].push(c.join(""));
    }

console.log(a);

结果:

  1. 0: (7) ["a", "b", "c", "d", "e", "f", "g"]//一个
  2. 1: (21) ["ab", "ac", "bc", "ad", "bd", "cd", "ae", "be", "ce", "de", "af", "bf", "cf", "df", "ef", "ag", "bg", "cg", "dg", "eg", "fg"]//两两组合
  3. 2: (35) ["abc", "abd", "acd", "bcd", "abe", "ace", "bce", "ade", "bde", "cde", "abf", "acf", "bcf", "adf", "bdf", "cdf", "aef", "bef", "cef", "def", "abg", "acg", "bcg", "adg", "bdg", "cdg", "aeg", "beg", "ceg", "deg", "afg", "bfg", "cfg", "dfg", "efg"]
  4. 3: (35) ["abcd", "abce", "abde", "acde", "bcde", "abcf", "abdf", "acdf", "bcdf", "abef", "acef", "bcef", "adef", "bdef", "cdef", "abcg", "abdg", "acdg", "bcdg", "abeg", "aceg", "bceg", "adeg", "bdeg", "cdeg", "abfg", "acfg", "bcfg", "adfg", "bdfg", "cdfg", "aefg", "befg", "cefg", "defg"]
  5. 4: (21) ["abcde", "abcdf", "abcef", "abdef", "acdef", "bcdef", "abcdg", "abceg", "abdeg", "acdeg", "bcdeg", "abcfg", "abdfg", "acdfg", "bcdfg", "abefg", "acefg", "bcefg", "adefg", "bdefg", "cdefg"]
  6. 5: (7) ["abcdef", "abcdeg", "abcdfg", "abcefg", "abdefg", "acdefg", "bcdefg"]
  7. 6: ["abcdefg"]

输出的组合数组中不会出现重复的元素。

你可能感兴趣的:(JS数组元素的重新组合(两两组合,三三组合........))