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