先上代码:
function fastSort(arr, isDown=false){
if(getVarType(arr) !== "array" || arr.length <= 1){
return arr;
}
var mid = arr.splice(Math.floor((arr.length-1)/2), 1)[0],
left = [],
right = [];
for(var i=0; i<arr.length; i++){
arr[i] > mid? right.push(arr[i]):
left.push(arr[i]);
}
[a, b] = isDown?[right, left]:
[left, right];
return fastSort(a).concat(mid, fastSort(b));
}
var a = [417,7,9,42,3,3,43,90,0,66];
fastSort(a);
写了个快速排序,想用解构赋值的方式 实现升序降序功能,然后这种写法得到的数组是:[0, 3, 3],大概调试看了下发现 最后的return传的参数把a,b 改为left,right,结果就没问题。或者a,b的赋值改为
var a = isDown?right: left,
b = isDown?left: right;
结果也是没问题,所以猜测会是和解构赋值这种写法有关么?
PS:控制台打了下断点,发现用 return fastSort(a).concat(mid, fastSort(b)) 这种写法fastSort(b) 都没有调用就直接return 最终结果了,所以导致得到的数组是 [0,3,3].
12345678_0001
相关分类