如何在JS中获得具有不同顺序的所有组合?

时间:2019-07-17 13:23:58

标签: javascript

我有一个包含六个项目的数组。

['orange', 'strawberry', 'melon','apple','banana','coconut']

我能够获得许多组合,但是不幸的是,我的脚本无法设置e。 G。最后一个项目放在前面,这样我就可以拥有所有组合。

如果查看以下输出的末尾,则会发现椰子总是在末尾,但它也应该排在第一,第二等。

(这是指项目之间没有空格)

orange
strawberry
orangestrawberry
melon
orangemelon
strawberrymelon
orangestrawberrymelon
apple
orangeapple
strawberryapple
orangestrawberryapple
melonapple
orangemelonapple
strawberrymelonapple
orangestrawberrymelonapple
banana
orangebanana
strawberrybanana
orangestrawberrybanana
melonbanana
orangemelonbanana
strawberrymelonbanana
orangestrawberrymelonbanana
applebanana
orangeapplebanana
strawberryapplebanana
orangestrawberryapplebanana
melonapplebanana
orangemelonapplebanana
strawberrymelonapplebanana
orangestrawberrymelonapplebanana
coconut
orangecoconut
strawberrycoconut
orangestrawberrycoconut
meloncoconut
orangemeloncoconut
strawberrymeloncoconut
orangestrawberrymeloncoconut
applecoconut
orangeapplecoconut
strawberryapplecoconut
orangestrawberryapplecoconut
melonapplecoconut
orangemelonapplecoconut
strawberrymelonapplecoconut
orangestrawberrymelonapplecoconut
bananacoconut
orangebananacoconut
strawberrybananacoconut
orangestrawberrybananacoconut
melonbananacoconut
orangemelonbananacoconut
strawberrymelonbananacoconut
orangestrawberrymelonbananacoconut
applebananacoconut
orangeapplebananacoconut
strawberryapplebananacoconut
orangestrawberryapplebananacoconut
melonapplebananacoconut
orangemelonapplebananacoconut
strawberrymelonapplebananacoconut
orangestrawberrymelonapplebananacoconut

1 个答案:

答案 0 :(得分:0)

您可能会看到以下内容:

a b

a
a b
b
b a
     
a b c

a
a b
a b c
a c
a c b

b
b a
b a c
b c
b c a

c
c a
c a b
c b
c b a
     

以上显示,您可以获取每个项目,然后使用不使用项目的数组再次调用该函数。结果,您将获得具有任意组合的数组。

function getCombinations(array) {
    var i,
        result = [];

    for (i = 0; i < array.length; i++) {
        result.push(
            array[i],
            ...getCombinations(array.filter((_, j) => i !== j)).map(v => array[i] + v)
        );
    }
    return result;
}

var array = ['orange', 'strawberry', 'melon', 'apple', 'banana', 'coconut'];

console.log(getCombinations(array));
.as-console-wrapper { max-height: 100% !important; top: 0; }