使用递归。
对于给定数组中的每个元素,为其其余元素创建所有部分排列。
使用Array.prototype.map()方法将元素与每个部分排列组合,然后使用Array.prototype.reduce()方法将所有排列组合到一个数组中。
使Array.prototype.length等于2或1。
⚠️警告:这个函数的执行时间随着每个数组元素呈指数增长。任何超过 8 到 10 个条目都可能导致您的浏览器在尝试解决所有不同组合时挂起。
JavaScript
const permutations = arr => {
if (arr.length <= 2) return arr.length === 2 ? [arr, [arr[1], arr[0]]] : arr;
return arr.reduce(
(acc, item, i) =>
acc.concat(
permutations([...arr.slice(0, i), ...arr.slice(i + 1)]).map(val => [
item,
...val,
])
),
[]
);
};
更多内容请访问我的网站:https://www.icoderoad.com