如何将数组每个元素与后续所有元素两两组合 修正现有代码输出错误问题
解决方案
问题原因
现有递归逻辑每次拼接新字符后都会直接存入结果数组,且未在拼接出2个字符时终止递归,因此生成了大量单字符、3字符、4字符的多余结果。
方案1:修改现有递归代码
仅保留长度为2的拼接结果,且拼接完成后立刻终止递归,避免生成更长的字符串:
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) // 输出 ["AB", "AC", "AD", "BC", "BD", "CD"] function recurse_function(string_val, count) { // 拼接出2个字符时存入结果,终止递归 if (string_val.length === 2) { sql_parts.push(string_val) return; } // 下标越界时直接返回 if (count >= myArray.length) { return; } string_val += myArray[count] recurse_function(string_val, count + 1) }
方案2:双层循环实现(更推荐)
无需递归,直接让每个元素仅和后方元素配对,天然避免重复组合,逻辑更清晰性能更好:
var myArray = ['A', 'B', 'C', 'D'] var sql_parts = [] // 外层遍历到倒数第二个元素即可 for (var i = 0; i < myArray.length - 1; i++) { // 内层从i的下一个元素开始遍历 for (var j = i + 1; j < myArray.length; j++) { sql_parts.push(myArray[i] + myArray[j]) } } console.log(sql_parts) // 输出 ["AB", "AC", "AD", "BC", "BD", "CD"]
内容的提问来源于stack exchange,提问作者jason
相关产品推荐
相关产品推荐

