嘿,做排序練習,我發現了一些我不完全理解的東西。
let numbers = [1,3,2,5,4];
let sortedHighesttoLowest = numbers.sort((a, b)=> b-a);
let sortedLowesttoHighest = numbers.sort((a, b)=> a-b);
console.log(sortedHighesttoLowest);
console.log(sortedLowesttoHighest);
output:
[ 1, 2, 3, 4, 5 ]
[ 1, 2, 3, 4, 5 ]
即使我將它們分配給兩個單獨的變數,這怎么只輸出最后一個函式的值兩次?
uj5u.com熱心網友回復:
陣列是通過參考傳遞的。因此,當您為變數分配一個已排序的陣列,然后再次排序時,第一個變數也會受到影響。您可以使用擴展運算子來避免這種情況。
let numbers = [1,3,2,5,4];
let sortedHighesttoLowest = [...numbers.sort((a, b)=> b-a)];
let sortedLowesttoHighest = [...numbers.sort((a, b)=> a-b)];
console.log(sortedHighesttoLowest);
console.log(sortedLowesttoHighest);
//output:
//[ 1, 2, 3, 4, 5 ]
//[ 1, 2, 3, 4, 5 ]
uj5u.com熱心網友回復:
比較器函式的作業方式與您可能習慣的一些傳統語言幾乎沒有什么不同。
在 js 中,comparator 的回傳值是 -1、0 和 1。雖然在很多情況下你可以使用-減號運算子來逃避。
話雖如此,您在這里將陣列作為參考傳遞,這導致了問題。
嘗試運行這個:
let numbers = [1,3,2,5,4];
let sortedHighesttoLowest = numbers.sort((a, b)=> a - b);
console.log(sortedHighesttoLowest);
let sortedLowesttoHighest = numbers.sort((a, b)=> b - a);
console.log(sortedLowesttoHighest);
此外,我會鼓勵你去通過這里還有
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/321836.html
標籤:javascript 数组 算法 排序
