javascript - Array.filter 也能够映射对象数组是否正常?
问题描述
不确定这是否真的是一个问题,但是当我在使用 Array.filter 时不小心没有使用相等检查时,我注意到了这一点。相反,当我觉得我应该因为不使用相等检查而收到某种错误时,它映射了我的数组:
const x = [{ name: 'user' }];
console.log(x.filter(x => x.name = 'another user'))
// Result:
// [{ name: 'another user' }]
这在任何地方都有记录吗?我觉得这不是故意的。我找不到任何关于 Array.filter 也能够映射的信息,所以我在这里问它。也许这属于github...
解决方案
有许多数组方法可以很好地迭代数组的所有元素,除非以某种方式提前停止(例如通过抛出的错误,或通过回调返回的虚假值Array.every
,或通过回调返回的真实值Array.find
)。
这些方法都可能被滥用来做一些他们不是为之设计的事情。没有例外,除了为副作用设计的通用迭代方法。
是的,您可以通过在回调中执行副作用来滥用.filter
作为通用迭代方法的替代品。例如,您也可以以.map
完全相同的方式滥用。
如果您希望能够保护自己免受此类拼写错误的影响,请考虑使用 linter 来警告您,例如使用 ESLint 的no-return-assign。
推荐阅读
- javascript - React 受约束的输入字段(例如带有最小约束的数字)不允许您轻松地输入值
- electron - 如何在 Webviews 中使用 Electron 8.x 的内置拼写检查器
- postgresql - 我可以将 PostGIS 用于自定义世界吗?
- c++ - 如何在类成员变量上重载赋值运算符
- excel - 带有组合框和形状复制的 VBA Excel 案例查询
- python - 从 Pandas 的列中删除非整数和非浮点值?
- python - 从文件名中提取日期并创建一个新列,该日期在 Python 中自动填充
- speech-recognition - 是什么导致 Microsoft 认知服务语音识别器对象发送 SessionStopped 事件?
- javascript - 带有反应的本地网络分析仪
- sql - 如何避免在开始 SQL 查询时删除的表上出现错误?