我試圖理解陣列排序方法,我目前面臨的問題是,當我在比較函式中宣告一些變數時,它的排序與沒有這些變數的情況不同,盡管這些變數沒有在任何地方使用
誰能解釋這里實際發生的事情
我還發現排序函式在 Firefox 和 chrome

let list1 = ["a","b","c","d","e","f","g","h","i"]
list1.sort((a,b)=>{
let pat = ["d","a"]
return b - a
})
console.log(list1) // Array(9) [ "a", "b", "c", "d", "e", "f", "g", "h", "i" ]
let list2 = ["a","b","c","d","e","f","g","h","i"]
list2.sort((a,b)=>{
// let pat = ["d","a"]
return b - a
})
console.log(list2) // Array(9) [ "i", "h", "g", "f", "e", "d", "c", "b", "a" ]
uj5u.com熱心網友回復:
如果從另一個字串中減去一個字串,它將嘗試將字串轉換為數字。
您的所有字串都將轉換為NaN.
NaN-NaN也是NaN。
因此,您比較陣列中的哪兩個值并不重要,您的比較函式將始終回傳NaN.
(請注意,比較函式應該回傳一個0大于0或小于的數字,0 并且對于任何給定的值對都是一致的。您正在使用的那個只是因為您正在使用的資料而損壞)。
因此,字母的排序順序取決于它們相互比較的順序(因為您的比較功能已損壞)。
該順序由 JS 引擎使用的排序演算法決定。這是規范不強制要求的實作細節。
一種瀏覽器可能使用快速排序,而另一種瀏覽器可能使用冒泡排序。因此,您會得到不同的結果。
撰寫一個不是廢話的比較函式以獲得一致的結果。
在大多數情況下,默認的比較函式是用于詞法排序的 find。
uj5u.com熱心網友回復:
如果你這樣做"a" - "b",它會評估NaN哪個是不正確的,因為這不是你想要的并且也是不一致的(因瀏覽器而異)。
要么不傳遞回呼,sort在這種情況下它會執行以下操作:
sort() 方法對陣列的元素進行就地排序并回傳排序后的陣列。默認排序順序是升序,將元素轉換為字串,然后比較它們的 UTF-16 代碼單元值序列。
或者你可以使用String.prototype.localeCompare
let list = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
console.log([...list].sort());
console.log([...list].sort((a, b) => a.localeCompare(b)));
如果您想在排序后的陣列中添加一些值,則必須單獨執行,您不能使用sort.
let list = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
let pat = ["x", "y"];
let sortedList = [...list].sort();
let patAppendedSortedList = [...pat, ...sortedList];
console.log(patAppendedSortedList);
如果你想同時對 and 進行排序list,pat但又想將所有元素保留在所有pat元素之前,請list考慮下面的代碼段。
let list = ["a", "b", "c", "d", "e", "f", "g", "h", "i"];
let pat = ["z", "x", "y"];
let patSet = new Set(pat);
let sortedList = [...pat, ...list].sort((a, b) => {
// If a has higher priority put it before b
if (patSet.has(a) && !patSet.has(b)) {
return -1;
}
// If b has higher priority put it before a
if (patSet.has(b) && !patSet.has(a)) {
return 1;
}
// Otherwise both a and b have same priority
// Sort them according to their value
return a.localeCompare(b);
});
console.log(sortedList);
uj5u.com熱心網友回復:
現在我明白了你的目標。但是你不能用你的方式存檔。您不能在 JS 排序函式中添加一些值。您必須分兩步完成。1.) 排序 2.) 將您的 pat 值添加到已排序的陣列中。
const list = ["a","b","c","d","e","f","g","h","i"];
const pat = ["d","a"];
const sorted = [...pat, ...list.sort()];
console.log(sorted)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/468385.html
標籤:javascript
上一篇:如何添加新的患者mysql?
