输入参数 ‘abc',输出所有组合 ['abc','acb','bac','bca','cab','cba']
思路:分为3列,第一列为 a, b,c ;第二列为a,b,c出去第一列选中过后的,比如第一列选了a,第二列就为b,c。以此类推。最终结果为每一列选中的字符串相加(路径)
代码:
function getList(data) { let result = [] list(data) return result function list(a, data = '') { // a为原始数据,data为不包含此列的路径 a = [...a] // 数据浅复制 if (a.length === 1) { data += a[0] result.push(data) // 当最后一个的时候,把路径push进去 } for (let i = 0; i < a.length; i++) { let now = a[i] // 此列选中 now2 = data // 路径复制,data不可污染,保证此列循环,路径不变 now2 += now // 从第一列到此列的路径 let left = a.filter(it => it !== now) // 此列选中剩余的数据 list(left, now2) } } } let data = getList('abcdefg') console.log(data)