假设我有一个数组:
var arr = [1, 1, 2, 3, 3];
我需要计算所有唯一可能的组合 按顺序 从此数组中使用尽可能多的数字,前提是每个数组都是唯一的。我不太关心价值观,而是关注匹配的矩阵矩阵:
[0, 2, 3]
[0, 2, 4]
[1, 2, 3]
[1, 2, 4]
我看了this answer,但是当我这样做时:
var arr = [1, 1, 2, 3, 3];
console.log(allPossibleCases(arr));
我明白了:
["1 1 2 3 3"]
根据该功能的作用,这是有道理的,但我一直无法根据自己的需要进行调整。
编辑:
请注意我所说的 IN ORDER 部分。这不是一整套排列,this question中没有一个答案可以解决我的问题。
答案 0 :(得分:1)
对于使用this answer中的函数,您只需要使用Array.reduce这样的内容准备一下这个
var prepared = [1, 1, 2, 3, 3].reduce(function(acc,el,index){
var cur = acc.map[el];
if(!cur) {
acc.map[el] = cur = [];
acc.res.push(cur);
}
cur.push(index);
return acc;
},{res:[],map:{}}).res;
和prepared
看起来像[[0,1],[2],[3,4]]
这里只是重复项目的组索引。