javascript-数组中属性的所有组合
作者:互联网
好吧,最近几天我一直在为此烦恼.生成所有可能组合的数组的最简洁的方法(没有巨大开销的任何方法)
var input = [
{a: 1}, {a: 2, b: 3},
{b: 4}, {b: 5}, {a: 6}
];
因此,我希望生成以下内容:
var output = [
{a: 1}, {b: 4}, {b: 5}, {a: 6},
{a: 1, b: 4}, {a: 1, b: 5},
{a: 6, b: 4}, {a: 6, b: 5},
{a: 2, b: 3}
];
事实是,在我的特定情况下,我正在谈论4个属性(实际上,我需要为每个不同属性集的集合生成一个单独的数组,但是,这两种东西我以后都应该可以实现.)但是,我正在寻找的只是关于如何解决此问题的通用伪代码,而不是有人为我或类似的东西编写它.
我觉得这应该是我应该能够弄清楚的东西,但我只是没有到达那里.首先,我为所有属性组合(所有a,所有b,所有c,所有ab,所有bc等)生成单独的数组.然而,要解决的问题是,已经有了3个属性,接下来您必须为所有b,c和bc添加一个.现在,为单个属性写出来就很简单了,但是为n属性写一个通用的解决方案就完全使我难以理解了.
解决方法:
我不确定我是否真的了解这些要求,但是您可以按照以下方式尝试递归解决方案(使用伪代码而不是javascript):
def generate(i,C):
# C is a dictionary representing the currently defined properties
# We are allowed to add to our set of properties from the choices input[i],input[i+1],...
# First choose a non-conflicting set of additional properties to add
while i<len(input):
if all of properties in input[i] are not in C:
Add properties in input[i] to C
solutions.append(C)
generate(i+1,C)
Remove properties in input[i] from C
i++
generate(0,{})
标签:combinatorics,javascript 来源: https://codeday.me/bug/20191121/2050104.html