将阵列拆分为具有动态大小和所有组合的固定n块

时间:2018-03-17 02:05:22

标签: javascript split

我有一个数组说,

var a = [1,2,3];

我希望将其分成正好n个块,但包含所有组合。

示例:

n=2它应该返回时

combination1: [1],[2,3] or combination1: [2,3],[1]

combination2: [2],[1,3] or combination2: [1,3],[2]

combination3: [3],[1,2] or combination3: [1,2],[3]

我已经尝试过这段代码但是没有给我所有的组合

function go(array, n) {
function iter(left, right) {
    var i,
        l = left.length - n + right.length + 1;

    if (right.length + 1 === n) {
        result.push(right.concat([left]));
        return;
    }
    for (i = 1; i <= l; i++) {
        iter(left.slice(i), right.concat([left.slice(0, i)]));
    }
}
var result = [];
iter(array, []);
return result;

}

1 个答案:

答案 0 :(得分:0)

使用此:

Array.prototype.partition = function(i) {
  return this.reduce((a, r, l) => {
    if (typeof a === "number") return [ [[a, r]], [[a],[r]] ];
    V = [];
    a.forEach(u => {
      y = Array.from(u);
      if (i > y.length) {
        y.push([r]);
        V.push(y);
      }
      if (i - u.length <= this.length - l - 1) {
        u.forEach((t, t_i) => {
          t = t.concat(r);
          t = [t].concat(u.filter((z, z_i) => (z_i != t_i)));
          V.push(t);
        })
      }
    });
    return V;
  })
};
console.log([1, 2, 3].partition(2));
console.log([1, 2, 3, 4].partition(3));