关于目标1,您的代码在保持纯净方面做得很好——它只是克隆了所有内容。
然而,这与目标3并不相符。而
recursiveSort
是预期的吗
O(n²)
,克隆数组的整个内容会增加复杂性负担,现在复杂性不仅取决于输入数组的长度,还取决于元素的大小和深度。由于排序无论如何都不会对元素进行变异,这是没有意义的-您可以而且应该只返回一个包含原始对象的新数组。纯净的一个主要目标是允许分享!
所以使用
function bubbleSorted(array, fnCompare = defaultCompare) {
if (typeof fnCompare != "function")
throw new Error("fnCompare must be a function");
if (!Array.isArray(array))
throw new Error("array must be an Array");
return recursiveSort(array.slice(), array.length, fnCompare);
}
还要注意,您有许多不必要的基本情况。您的算法应该只需要在以下情况下停止
swapped
是假的。您不需要对正在测试的数组长度进行额外测试
0
或
1
.