javascript - 为什么 reducer 会忽略数组中的第一项?
问题描述
我有这个函数应该运行每个验证器,然后返回包含错误的对象。
一切似乎都工作正常,但数组中的第一个验证器。似乎reduce
完全忽略了它。无论我放什么验证器,它都会直接转到第二个验证器。
我在这里遗漏了一些明显的东西吗?
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
})
);
解决方案
如果您不提供要归约的初始值,那么它将使用数组的第一个元素作为初始值,并跳过使用该元素调用归约器。所以你的减速器第一次被调用时,currentErrors
isvalidateFullName
和validator
is validateServicePresence
。
要解决此问题,只需添加一个初始值:
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
}, {}) // <===================
);
See the initialValue section here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Parameters
推荐阅读
- mysql - 一般错误:1267 Illegal mix of collations DB error at checkout
- python - 为什么我不能在ffmpeg中那样做?
- kotlin - 启动后台任务时附加观察者的正确顺序
- wordpress - 动态填充的级联下拉错误
- mysql - 无法使用 MySQL 连接器/NET 创建存储过程
- c - 如何启用/禁用金丝雀?
- nginx - nginx:重定向到相同的 URL 但不同的端口?
- maxima - wxMaxima:函数中的子索引变量在写为“x_1”时有效,但在写为“x[1]”时无效
- python - 如何删除包含公共元素的子列表?
- amazon-web-services - AWS Amplify 归属关系和过滤