跳至主要內容

require-array-sort-compare

要求Array#sortArray#toSorted 呼叫總是提供 compareFunction

💭

此規則需要 類型資訊 來執行。

當在沒有比較函式的狀態下呼叫時,Array#sort()Array#toSorted() 會將所有非 undefined 的陣列元素轉換成字串,然後根據它们的 UTF-16 代碼單位來比較這些字串 [ECMA 規格]

結果是元素會按字母順序排序,而不論它們的類型。例如,當對數字排序時,這會導致 "10 在 2 之前" 的順序

[1, 2, 3, 10, 20, 30].sort(); //→ [1, 10, 2, 20, 3, 30]

此規則報告沒有提供 compare 參數的任何排序方法呼叫。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/require-array-sort-compare": "error"
}
};

在測試區中嘗試此規則 ↗

範例

此規則旨在確保所有對原生排序方法的呼叫都提供 compareFunction,同時無視對使用者定義方法的呼叫。

const array: any[];
const stringArray: string[];

array.sort();

// String arrays should be sorted using `String#localeCompare`.
stringArray.sort();
在測試區中開啟

選項

此規則接受下列選項

type Options = [
{
/** Whether to ignore arrays in which all elements are strings. */
ignoreStringArrays?: boolean;
},
];

const defaultOptions: Options = [{ ignoreStringArrays: true }];

ignoreStringArrays

此規則搭配 { ignoreStringArrays: true } 的程式碼範例

const one = 1;
const two = 2;
const three = 3;
[one, two, three].sort();
在測試區中開啟

何時不該使用

如果您強烈希望您的陣列始終以類似字串的方式排序,可以安全地關閉此規則。


類型檢查型 linter 規則比傳統 linter 規則功能更強大,但也需要設定 類型檢查型 linting。如果您在啟用類型檢查型規則後遇到效能劣化,請參閱 效能疑難排解

資源