字符串
function all(str) { if (!str) return [] let res = [] if (str.length == 1) { res.push(str) } else if (str.length > 1) { //遍历每一项 for (let i = 0; i < str.length; i++) { //拿到当前的元素 var left = str[i] //除当前元素的其他元素组合 var rest = str.slice(0, i) + str.slice(i + 1, str.length) //上一次递归返回的全排列 var preResult = all(rest) //组合在一起 for (var j = 0; j < preResult.length; j++) { var tmp = left + preResult[j] res.push(tmp) } } } return res }
数组
function arrall(arr) { if (!arr) return [] var res = [] if (arr.length > 1) { for (var i = 0; i < arr.length; i++) { var tem = [] var left = arr[i] tem.push(left) var rest = arr.slice(0, i).concat(arr.slice(i + 1, arr.length)) var preResult = arrall(rest) // console.log(preResult); for (var j = 0; j < preResult.length; j++) { var tmp = tem.concat(preResult[j]) res.push(tmp) } } } else { res.push([arr]) } return res }