Eslint
规则 | Rules

sort-keys

需要对对象键进行排序(排序键)

在声明多个属性时,一些开发人员喜欢按字母顺序对属性名称进行排序,以便稍后能够更轻松地找到必要的属性。其他人则认为这增加了复杂性,并成为维护的负担。

规则细节

该规则检查对象表达式的所有属性定义并验证所有变量是按字母顺序排序的。

此规则的错误代码示例:

/*eslint sort-keys: "error"*/ /*eslint-env es6*/ let obj = {a: 1, c: 3, b: 2}; let obj = {a: 1, "c": 3, b: 2}; // Case-sensitive by default. let obj = {a: 1, b: 2, C: 3}; // Non-natural order by default. let obj = {1: a, 2: c, 10: 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 obj = {a: 1, ["c"]: 3, b: 2}; let obj = {a: 1, [S]: 3, b: 2};

此规则的正确代码示例:

/*eslint sort-keys: "error"*/ /*eslint-env es6*/ let obj = {a: 1, b: 2, c: 3}; let obj = {a: 1, "b": 2, c: 3}; // Case-sensitive by default. let obj = {C: 3, a: 1, b: 2}; // Non-natural order by default. let obj = {1: a, 10: b, 2: c}; // This rule checks computed properties which have a simple name as well. let obj = {a: 1, ["b"]: 2, c: 3}; let obj = {a: 1, [b]: 2, c: 3}; // This rule ignores computed properties which have a non-simple name. let obj = {a: 1, [c + d]: 3, b: 2}; let obj = {a: 1, ["c" + "d"]: 3, b: 2}; let obj = {a: 1, [`${c}`]: 3, b: 2}; let obj = {a: 1, [tag`c`]: 3, b: 2};

选项

{ "sort-keys": ["error", "asc", {"caseSensitive": true, "natural": false}] }

第一个选项是"asc""desc"

  • "asc" (默认) - 强制属性按升序排列。

  • "desc" - 强制属性按降序排列。

第二个选项是具有2个属性的对象。

  • caseSensitive- 如果true强制执行属性以区分大小写的顺序。默认是true

  • natural- 如果true强制性质按照自然顺序执行。默认是false。自然顺序以人类排序的方式比较包含字母和数字组合的字符串。它基本上按数字排序,而不是按字母顺序排序。所以数字10出现在自然分类中的数字3之后。

列表示例:

natural为真,顺序将是1 3 6 8 10

natural为假,则排序为1 10 3 6 8

desc

选项的错误代码示例"desc"

/*eslint sort-keys: ["error", "desc"]*/ /*eslint-env es6*/ let obj = {b: 2, c: 3, a: 1}; let obj = {"b": 2, c: 3, a: 1}; // Case-sensitive by default. let obj = {C: 1, b: 3, a: 2}; // Non-natural order by default. let obj = {10: b, 2: c, 1: a};

选项的正确代码示例"desc"

/*eslint sort-keys: ["error", "desc"]*/ /*eslint-env es6*/ let obj = {c: 3, b: 2, a: 1}; let obj = {c: 3, "b": 2, a: 1}; // Case-sensitive by default. let obj = {b: 3, a: 2, C: 1}; // Non-natural order by default. let obj = {2: c, 10: b, 1: a};

insensitive

选项的错误代码示例{caseSensitive: false}

/*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/ /*eslint-env es6*/ let obj = {a: 1, c: 3, C: 4, b: 2}; let obj = {a: 1, C: 3, c: 4, b: 2};

选项的正确代码示例{caseSensitive: false}

/*eslint sort-keys: ["error", "asc", {caseSensitive: false}]*/ /*eslint-env es6*/ let obj = {a: 1, b: 2, c: 3, C: 4}; let obj = {a: 1, b: 2, C: 3, c: 4};

natural

选项的错误代码示例{natural: true}

/*eslint sort-keys: ["error", "asc", {natural: true}]*/ /*eslint-env es6*/ let obj = {1: a, 10: c, 2: b};

选项的正确代码示例{natural: true}

/*eslint sort-keys: ["error", "asc", {natural: true}]*/ /*eslint-env es6*/ let obj = {1: a, 2: b, 10: c};

何时不使用

如果您不想通知属性的订单,那么禁用此规则是安全的。

相关规则

  • sort-imports

  • sort-vars

兼容性

  • JSCS: validateOrderInObjectKeys版本此规则是在ESLint 3.3.0.Resources中引入的