gpt4 book ai didi

Javascript - 在单个数组中生成元素的所有组合(成对)

转载 作者:可可西里 更新时间:2023-11-01 01:27:26 31 4
gpt4 key购买 nike

我已经看到了几个关于如何生成数组中元素的所有可能组合的类似问题。但是我很难弄清楚如何编写一个只输出组合的算法。任何建议将不胜感激!

从以下数组开始(有 N 个元素):

var array = ["apple", "banana", "lemon", "mango"];

得到如下结果:

var result = [
"apple banana"
"apple lemon"
"apple mango"
"banana lemon"
"banana mango"
"lemon mango"
];

我正在尝试以下方法,但这会产生所有可能的组合,而不仅仅是组合对。

var letters = splSentences;
var combi = [];
var temp= "";
var letLen = Math.pow(2, letters.length);

for (var i = 0; i < letLen ; i++){
temp= "";
for (var j=0;j<letters.length;j++) {
if ((i & Math.pow(2,j))){
temp += letters[j]+ " "
}
}
if (temp !== "") {
combi.push(temp);
}
}

最佳答案

这里有一些函数式编程解决方案:

使用 EcmaScript2019 的 flatMap :

var array = ["apple", "banana", "lemon", "mango"];

var result = array.flatMap(
(v, i) => array.slice(i+1).map( w => v + ' ' + w )
);

console.log(result);

在引入 flatMap 之前(我在 2017 年的回答),你会选择 reduce[].concat(...) 为了展平数组:

var array = ["apple", "banana", "lemon", "mango"];

var result = array.reduce( (acc, v, i) =>
acc.concat(array.slice(i+1).map( w => v + ' ' + w )),
[]);

console.log(result);

或者:

var array = ["apple", "banana", "lemon", "mango"];

var result = [].concat(...array.map(
(v, i) => array.slice(i+1).map( w => v + ' ' + w ))
);

console.log(result);

关于Javascript - 在单个数组中生成元素的所有组合(成对),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241174/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com