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

标签 javascript arrays algorithm combinations

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

从以下数组开始(有 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/

相关文章:

javascript - toString() 用于 Javascript 中数组的每个元素

使用分而治之范式的算法实现

c++ - 负相关程序的一个例子

javascript - 如何为每个端点和 REST 方法设置不同的 Passport JS Bearer 策略?

php - 如何在php中的数组的父项下显示子项

arrays - 使用 jq 为 JSON 数组运行计数器

将值范围内的元素分类为簇的算法?

javascript - AngularJS Provider 多实例

javascript - 如何在不破坏我的网页的情况下向我的 div 添加滚动条

javascript - WMTS 和 WMTSTileGrid 导致 "Cannot read property ' 每个'未定义'