我正在尝试编写一个执行以下操作的函数:
> partitions([a,b,c,d])
< [
[[a,b],[c,d]],
[[a,c],[b,d]],
[[a,d],[b,c]]
]
即它找到所有大小为 2 的分区。
目前我正在尝试递归地执行此操作:在每次调用时生成一个对列表,并且对于生成的每个对,在删除该对的情况下再次调用列表上的方法。这可行,但会生成重复项。删除重复项需要比较生成的分区中的每个元素,这非常慢。
我想知道是否有更聪明的方法来做到这一点。
最佳答案
只需获取所有项目的组合并过滤掉所有不需要的,就像这样
function getTwoCombinations(array) {
var i, j, result = [];
for (i = 0; i < array.length; i += 1) {
for (j = i + 1; j < array.length; j += 1) {
result.push([array[i], array[j]]);
}
}
return result;
}
var result = getTwoCombinations(getTwoCombinations(["a", "b", "c", "d"])).
filter(function(items) {
return items[0].every(function(item) {
return !(items[1].indexOf(item) + 1);
});
});
console.log(result);
输出
[ [ [ 'a', 'b' ], [ 'c', 'd' ] ],
[ [ 'a', 'c' ], [ 'b', 'd' ] ],
[ [ 'a', 'd' ], [ 'b', 'c' ] ] ]
关于javascript - 在javascript中查找大小为2的集合中的所有分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870917/