将数组中的每个元素与其后面的元素组合



我试图将项目组合在一个数组中,每个项目都在它下面。它应该创建一个当前字符和它下面的每个字符的集合,并迭代地遍历数组。例如,如果我有这样一个数组:

var myArray = ['A','B','C','D']

我想要这样的输出:

AB AC AD BC BD CD

我的代码让我接近了,但我很难弄清楚剩下的。以下是目前为止的内容:

var myArray = ['A', 'B', 'C', 'D']
var sql_parts = []
var string = "";
for (var i = 0; i < myArray.length; i++) {
recurse_function(string, i)
}
console.log(sql_parts)
function recurse_function(string_val, count) {
if ((myArray.length - count) == 0) {
return string_val;
} else {
string_val += myArray[count]
sql_parts.push(string_val)
recurse_function(string_val, count + 1)
}
}

但是这会产生:

["A","AB","ABC","ABCD","B","BC","BCD","C","CD","D"]

这里有一个解决方案:

  • 定义递归函数,初始接受数组和空列表来存储组合
  • 基本条件是当数组为空或只有一个元素
  • 否则,删除第一个元素"start">
  • 遍历数组以存储其与以下元素的组合
  • 再次循环,更新数组和组合

function recurse_function(array, combinations = []) {
if(array.length <= 1) return combinations;
const start = array.shift();
for(let i = 0; i < array.length; i++) combinations.push(`${start}${array[i]}`);
return recurse_function(array, combinations);
}
console.log( recurse_function(['A','B','C','D']) );

var myArray = ['A','B','C','D']
var sql_parts = []
for(var i =0; i< myArray.length; i++){
var a = myArray[i]
for(var j = i+1; j<myArray.length; j++){
var b=myArray[j]
var c= a+b
sql_parts.push(c)
}
}

我认为这是你正在寻找的东西,这是一个非常便宜的资源函数。它不是递归的(为什么在这个简单的场景中需要这样的东西)

var myArray = ['A','B','C','D']
let [a, b, iter] = [0, 1, 2]
let result = []
for (;a < myArray.length; a++) {
for (;b < myArray.length; b++) {
result.push(myArray[a]+myArray[b])
} 
b = iter++
}
console.log(result)

我认为在这种特殊情况下不需要递归。您可以简单地将当前元素与以下元素结合使用flatMap:

['A','B','C','D'].flatMap((x, i, xs) => xs.slice(i+1).map(y => x+y));
//=> ["AB", "AC", "AD", "BC", "BD", "CD"]

var myArray = ['A', 'B', 'C', 'D'];
var result = [];
myArray.forEach((item, index) => {
myArray.forEach((item2, index2) => (index < index2 ? result.push(item + item2) : ''));
});
console.log(result);

最新更新