我已经看到了几个关于如何生成数组中元素的所有可能组合的类似问题。但是我很难弄清楚如何编写一个只输出对组合的算法。任何建议将不胜感激!
从以下数组开始(有 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/