简介
在本实验中,我们将探讨 JavaScript 中数组排列的概念。我们将学习如何使用递归生成数组元素的所有可能排列,即使它们包含重复项。我们还将了解如何使用诸如 map() 和 reduce() 之类的数组方法将不同的排列组合成一个数组。但是,我们必须记住,在包含超过 8 到 10 个元素的数组上执行此函数可能会显著增加执行时间并导致浏览器挂起。
在本实验中,我们将探讨 JavaScript 中数组排列的概念。我们将学习如何使用递归生成数组元素的所有可能排列,即使它们包含重复项。我们还将了解如何使用诸如 map() 和 reduce() 之类的数组方法将不同的排列组合成一个数组。但是,我们必须记住,在包含超过 8 到 10 个元素的数组上执行此函数可能会显著增加执行时间并导致浏览器挂起。
要开始练习编码,请打开终端/SSH 并输入 node。
以下是一个生成数组元素所有排列的算法(即使数组包含重复项)。按照以下步骤实现它:
Array.prototype.map() 将该元素与每个部分排列组合,然后使用 Array.prototype.reduce() 将所有排列组合成一个数组。2 或 1 的数组。以下是代码:
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
])
),
[]
);
};
你可以通过使用数组参数调用 permutations() 函数来测试代码:
permutations([1, 33, 5]);
// [ [1, 33, 5], [1, 5, 33], [33, 1, 5], [33, 5, 1], [5, 1, 33], [5, 33, 1] ]
恭喜你!你已经完成了数组排列实验。你可以在 LabEx 中练习更多实验来提升你的技能。