Sky*_*pho 0 javascript arrays reduce
我具有应该运行每个验证程序然后返回包含错误的对象的功能。
一切似乎都可以正常工作,但是数组中的第一个验证器。似乎reduce完全忽略了它。不管我在那放什么验证器,它都会直接转到第二个验证器。
我在这里错过明显的东西吗?
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
})
);
Run Code Online (Sandbox Code Playgroud)
如果您不提供要减少的初始值,则它将使用数组的第一个元素作为初始值,并跳过使用该元素调用的reducer。因此,您的reducer第一次被称为currentErrorsis validateFullName和validatoris validateServicePresence。
要解决此问题,只需添加一个初始值:
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
}, {}) // <===================
);
Run Code Online (Sandbox Code Playgroud)
请参阅此处的initialValue部分:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Parameters