[英]Why my quicksort code doesn't work in array of object?
我在 Stack Overflow 上找不到這個問題的答案。
我有一個名為 quickSort 的quickSort
:
function quickSort(array, prop) {
if (array.length <= 1) return array;
const pivot = array[0]; // I've tried array[0][prop] but it doesn't work
const left = [];
const right = [];
for (let i = 1; i < array.length; i++) {
if (array[i][prop] < pivot) {
left.push(array[i]);
} else {
right.push(array[i]);
}
}
return [...quickSort(left), pivot, ...quickSort(right)];
}
console.log(quickSort(data, 'motor'));
我想按motor
對這個對象數組進行排序:
let data = [
{
"color": "A",
"door": 1,
"wheel": 3,
"year": 1963,
"brand": "GMC",
"sold": false,
"owner": "Chalmers Boobyer",
"motor": 2.6,
"assembled": "20/08/2021"
},
{
"color": "B",
"door": 2,
"wheel": 2,
"year": 1980,
"brand": "Ford",
"sold": false,
"owner": "Angelia Cromett",
"motor": 2.5,
"assembled": "02/05/2021"
},
{
"color": "C",
"door": 3,
"wheel": 1,
"year": 1999,
"brand": "Audi",
"sold": false,
"owner": "Barth Pickring",
"motor": 2.0,
"assembled": "15/02/2021"
},
{
"color": "D",
"door": 4,
"wheel": 1,
"year": 2008,
"brand": "Hyundai",
"sold": true,
"owner": "Aurore Soaper",
"motor": 1.2,
"assembled": "02/01/2019"
}
];
有人可以解釋我如何使array[0][prop]
工作嗎?
我建議閱讀如何調試小程序。 在比較之前和 function 的開頭添加幾個戰略性的console.log
語句來顯示參數足以顯示問題所在。 這次我為你做了,但如果你想作為一名程序員取得進步,你將需要能夠調試自己的程序。
幾個問題:
您的遞歸調用quickSort(left)
和quickSort(right)
缺少第二個參數prop
。
array[i][prop] < pivot
如果pivot
定義為array[0]
是錯誤的,因為它比較不同的類型。 那應該是const pivot = array[0][prop]
正如您嘗試的那樣,但是您必須將返回的數組更改為
[...quickSort(left, prop), array[0], ...quickSort(right, prop)];
以下是應用的修復:
const quickSort = (array, prop) => { if (array.length <= 1) return array; // warning: bad pivot const pivot = array[0][prop]; const left = []; // warning: allocations const right = []; for (let i = 1; i < array.length; i++) { if (array[i][prop] < pivot) { left.push(array[i]); } else { right.push(array[i]); } } return [...quickSort(left, prop), array[0], ...quickSort(right, prop) ]; // warning: copies }; const data = [ { color: "A", door: 1, wheel: 3, year: 1963, brand: "GMC", sold: false, owner: "Chalmers Boobyer", motor: 2.6, assembled: "20/08/2021", }, { color: "B", door: 2, wheel: 2, year: 1980, brand: "Ford", sold: false, owner: "Angelia Cromett", motor: 2.5, assembled: "02/05/2021", }, { color: "C", door: 3, wheel: 1, year: 1999, brand: "Audi", sold: false, owner: "Barth Pickring", motor: 2.0, assembled: "15/02/2021", }, { color: "D", door: 4, wheel: 1, year: 2008, brand: "Hyundai", sold: true, owner: "Aurore Soaper", motor: 1.2, assembled: "02/01/2019", }, ]; console.log(quickSort(data, "motor"));
bug修復后,排序還是有問題:
prop
非常有限。 最好提供一個類似於內置排序的回調,這樣你就可以對任何對象進行排序,而不僅僅是頂級 prop。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.