编程语言
首页 > 编程语言> > javascript-数组中属性的所有组合

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