0

我正在用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]

谢谢菲利克斯·克林。

4

0 回答 0