sort-keys
要求物件鍵值進行排序
在宣告多個屬性時,有些開發人員偏好按字母順序排序屬性名稱,以便在之後更容易找到及/或比較必要的屬性。其他人則認為這會增加複雜性並成為維護負擔。
規則詳細資訊
此規則會檢查物件表達式的所有屬性定義,並驗證所有變數是否依字母順序排序。
此規則的不正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: "error"*/
let obj1 = {a: 1, c: 3, : 2};
let obj2 = {a: 1, "c": 3, : 2};
// Case-sensitive by default.
let obj3 = {a: 1, b: 2, : 3};
// Non-natural order by default.
let obj4 = {1: a, 2: c, : b};
// This rule checks computed properties which have a simple name as well.
// Simple names are names which are expressed by an Identifier node or a Literal node.
const S = Symbol("s")
let obj5 = {a: 1, ["c"]: 3, : 2};
let obj6 = {a: 1, []: 3, b: 2};
此規則的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: "error"*/
let obj1 = {a: 1, b: 2, c: 3};
let obj2 = {a: 1, "b": 2, c: 3};
// Case-sensitive by default.
let obj3 = {C: 3, a: 1, b: 2};
// Non-natural order by default.
let obj4 = {1: a, 10: b, 2: c};
// This rule checks computed properties which have a simple name as well.
let obj5 = {a: 1, ["b"]: 2, c: 3};
let obj6 = {a: 1, [b]: 2, c: 3};
// This rule ignores computed properties which have a non-simple name.
let obj7 = {a: 1, [c + d]: 3, b: 2};
let obj8 = {a: 1, ["c" + "d"]: 3, b: 2};
let obj9 = {a: 1, [`${c}`]: 3, b: 2};
let obj10 = {a: 1, [tag`c`]: 3, b: 2};
// This rule does not report unsorted properties that are separated by a spread property.
let obj11 = {b: 1, ...c, a: 2};
選項
{
"sort-keys": ["error", "asc", {"caseSensitive": true, "natural": false, "minKeys": 2}]
}
第一個選項是 "asc"
或 "desc"
。
"asc"
(預設)- 強制屬性按升序排列。"desc"
- 強制屬性按降序排列。
第二個選項是一個具有下列屬性的物件。
caseSensitive
- 如果為true
,則強制屬性按區分大小寫的順序排列。預設值為true
。minKeys
- 指定物件要產生未排序鍵值錯誤的最小鍵值數量。預設值為2
,表示預設情況下,所有具有未排序鍵值的物件都會導致檢查錯誤。natural
- 如果為true
,則強制屬性按自然順序排列。預設值為false
。自然順序會以人類排序的方式比較包含字母和數字組合的字串。它基本上是按數值排序,而不是按字母順序排序。因此,在自然排序中,數字 10 會排在數字 3 之後。allowLineSeparatedGroups
- 如果為true
,則此規則允許透過換行符分組物件鍵值。換句話說,屬性後的空白行會重設鍵值的排序。預設值為false
。ignoreComputedKeys
- 如果為true
,則此規則會忽略所有計算鍵值,並且不會報告由它們分隔的未排序屬性。計算鍵值會重設後續非計算鍵值的排序。預設值為false
。
列表範例
當 natural
為 true 時,排序將為 1 3 6 8 10
當 natural
為 false 時,排序將為 1 10 3 6 8
desc
"desc"
選項的不正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "desc"]*/
let obj1 = {b: 2, : 3, a: 1};
let obj2 = {"b": 2, : 3, a: 1};
// Case-sensitive by default.
let obj3 = {C: 1, : 3, a: 2};
// Non-natural order by default.
let obj4 = {10: b, : c, 1: a};
"desc"
選項的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "desc"]*/
let obj1 = {c: 3, b: 2, a: 1};
let obj2 = {c: 3, "b": 2, a: 1};
// Case-sensitive by default.
let obj3 = {b: 3, a: 2, C: 1};
// Non-natural order by default.
let obj4 = {2: c, 10: b, 1: a};
caseSensitive
{caseSensitive: false}
選項的不正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/
let obj1 = {a: 1, c: 3, C: 4, : 2};
let obj2 = {a: 1, C: 3, c: 4, : 2};
{caseSensitive: false}
選項的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/
let obj1 = {a: 1, b: 2, c: 3, C: 4};
let obj2 = {a: 1, b: 2, C: 3, c: 4};
natural
{natural: true}
選項的不正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {natural: true}]*/
let obj = {1: a, 10: c, : b};
{natural: true}
選項的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {natural: true}]*/
let obj = {1: a, 2: b, 10: c};
minKeys
{minKeys: 4}
選項的不正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {minKeys: 4}]*/
// 4 keys
let obj1 = {
b: 2,
: 1, // not sorted correctly (should be 1st key)
c: 3,
d: 4,
};
// 5 keys
let obj2 = {
2: 'a',
: 'b', // not sorted correctly (should be 1st key)
3: 'c',
4: 'd',
5: 'e',
};
{minKeys: 4}
選項的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {minKeys: 4}]*/
// 3 keys
let obj1 = {
b: 2,
a: 1,
c: 3,
};
// 2 keys
let obj2 = {
2: 'b',
1: 'a',
};
allowLineSeparatedGroups
{allowLineSeparatedGroups: true}
選項的不正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {allowLineSeparatedGroups: true}]*/
let obj1 = {
b: 1,
c () {
},
: 3
}
let obj2 = {
b: 1,
c: 2,
z () {
},
: 3
}
let obj3 = {
b: 1,
c: 2,
z () {
},
// comment
: 3,
}
let obj4 = {
b: 1
// comment before comma
, : 2
};
{allowLineSeparatedGroups: true}
選項的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {allowLineSeparatedGroups: true}]*/
let obj1 = {
e: 1,
f: 2,
g: 3,
a: 4,
b: 5,
c: 6
}
let obj2 = {
b: 1,
// comment
a: 4,
c: 5,
}
let obj3 = {
c: 1,
d: 2,
b () {
},
e: 3,
}
let obj4 = {
c: 1,
d: 2,
// comment
// comment
b() {
},
e: 4
}
let obj5 = {
b,
[foo + bar]: 1,
a
}
let obj6 = {
b: 1
// comment before comma
,
a: 2
};
var obj7 = {
b: 1,
a: 2,
...z,
c: 3
}
ignoreComputedKeys
{ignoreComputedKeys: true}
選項的正確程式碼範例
在遊樂場中開啟
/*eslint sort-keys: ["error", "asc", {ignoreComputedKeys: true}]*/
let obj1 = {
[b]: 1,
a: 2
}
let obj2 = {
c: 1,
[b]: 2,
a: 3
}
let obj3 = {
c: 1,
["b"]: 2,
a: 3
}
何時不使用此規則
如果您不想通知屬性的順序,則可以安全地停用此規則。
相容性
相關規則
版本
此規則已在 ESLint v3.3.0 中引入。