我正在用Javascript编写一个快速排序函数来对这样的对象数组进行排序(按Num
属性排序):
let Pairs = [
{ ID: 'C', Num: 21 },
{ ID: 'B', Num: 45 },
{ ID: 'F', Num: 0 },
{ ID: 'E', Num: 1 },
{ ID: 'D', Num: 9 },
{ ID: 'A', Num: 100 }
];
但是我发现在我的函数中添加分号partition()
解决了我的程序中的错误,在函数后面没有分号swapPair()
,我的程序给出了与输入相同的数组。这是我的代码:
const swapPair = (a, b) => {
let t = a;
a = b;
b = t;
return [a, b]
}
function partition(a, left, right, pivotIndex) {
pivotValue = a[pivotIndex].Num;
// Move Pivot to the End
[a[pivotIndex].ID, a[right].ID] = swapPair(a[pivotIndex].ID, a[right].ID);// This Semicolon
[a[pivotIndex].Num, a[right].Num] = swapPair(a[pivotIndex].Num, a[right].Num);// This Semicolon
storeIndex = left;
for (let i = left; i <= right - 1; i++) {
if (a[i].Num <= pivotValue) {
[a[storeIndex].ID, a[i].ID] = swapPair(a[storeIndex].ID, a[i].ID);// This Semicolon
[a[storeIndex].Num, a[i].Num] = swapPair(a[storeIndex].Num, a[i].Num);// This Semicolon
storeIndex = storeIndex + 1
}
}
// Move Pivot to the right place
[a[storeIndex].ID, a[right].ID] = swapPair(a[storeIndex].ID, a[right].ID);// This Semicolon
[a[storeIndex].Num, a[right].Num] = swapPair(a[storeIndex].Num, a[right].Num);// This Semicolon
return storeIndex
}
我想问题是我使用破坏赋值的方式?但我无法弄清楚原因,请帮助我:)。
更新:
问题实际上是破坏分配,我的函数返回一个数组,所以这个问题很难注意到:
function foo(){
...
return [a,b,c]
}
[A,B,C]=foo()
[D,E,F]=foo()
但没有分号,代码将被解释为:
[A,B,C]=[x,y,z]
[D,E,F]=[m,n,p]
=>
[A,B,C]=[x,y,z][D,E,F]=[m,n,p]
=>
[A,B,C]=[x,y,z][F]=[m,n,p]
=>
[A,B,C]=[m,n,p]
谢谢菲利克斯·克林。