JS - 循环使用给定数组创建的可能数组

时间:2017-05-14 12:24:56

标签: javascript

我确定已经在某个地方得到了解答,但我无法为纯JS找到这个特定问题的答案。
我需要一个像这样的函数:

function testAllPossibilities(array, callback) {
    //example array = [Obj1,Obj2];
    //allPossibilites = [[Obj1],[Obj2],[Obj1,Obj2],[Obj2,Obj1]]
    for (var i = 0; i < allPossibilites.length; i++) {
        callback(allPossibilites[i]);
    }
}

我不知道如何制作allPossibilities变量,而且我也不太了解所有这些数学术语,例如&#34;排列&#34;等等,以准确定义这个问题...这可能是我到目前为止找不到答案的原因。

allPossibilities的更多字词:
每个不同的顺序应该有可能,并且长度应该在1和数组的长度之间,但不能重复相同的元素。

1 个答案:

答案 0 :(得分:1)

function combinate (array) {
  const possibilities = new Set();

  function lookup (possible) {
    if possible.length {
      possibilities.add(possible);
    }

    const p = new Set(possible);
    const further = array.filter(el => !p.has(el));

    for (let entry of further) {
      lookup(possible.concat(entry));
    }
  }

  lookup([]);

  return Array.from(possibilities);
}

不要使用超过8个元素运行它。