优先使用 find
强制使用 Array.prototype.find() 而不是 Array.prototype.filter() 后跟 [0] 来查找单个结果。
在搜索数组中第一个匹配条件的项时,可能很想使用类似 arr.filter(x => x > 0)[0]
的代码。但是,使用 Array.prototype.find() 更简单,arr.find(x => x > 0)
,它也返回第一个匹配条件的条目。因为 .find()
只需要在找到匹配项之前执行回调,所以它也更高效。
信息
注意两种方法之间短路行为的差异。.find()
只会对数组元素执行回调,直到找到匹配项,而 .filter()
会对所有数组元素执行回调。因此,在修复此规则的错误时,请确保您的 .filter()
回调没有副作用。
- ❌ 不正确
- ✅ 正确
[1, 2, 3].filter(x => x > 1)[0];
[1, 2, 3].filter(x => x > 1).at(0);
在 Playground 中打开[1, 2, 3].find(x => x > 1);
在 Playground 中打开.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/prefer-find": "error"
}
};
在 Playground 中尝试此规则 ↗
选项
此规则不可配置。
何时不使用它
如果您有意使用 .filter(callback)[0]
之类的模式来在所有数组元素上执行 callback
中的副作用,则您将希望避免此规则。
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 linting。如果您在启用类型检查的规则后遇到性能下降,请参阅 性能故障排除。