我有一个应该运行每个验证程序然后返回包含错误的对象的函数。
一切似乎都可以正常工作,但是数组中的第一个验证器。 reduce
似乎完全忽略了它。不管我放在那里的验证器是什么,它都会直接转到第二个。
我在这里缺少明显的东西吗?
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
})
);
答案 0 :(得分:5)
如果不提供要减小的初始值,则它将使用数组的第一个元素作为初始值,并跳过使用该元素调用的reducer。因此,第一次调用化径器时,currentErrors
是validateFullName
,而validator
是validateServicePresence
。
要解决此问题,只需添加一个初始值:
export default values => (
[
validateFullName,
validateServicePresence,
validatePhoneField,
validateOrganizationName,
validateInn,
validateEmailField,
validateManagerEmail,
validateComment,
validateAgreement,
].reduce((currentErrors, validator) => {
const validationResult = validator(values);
return {
...currentErrors,
...validationResult,
};
}, {}) // <===================
);
在此处查看initialValue部分:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Parameters
答案 1 :(得分:1)
默认情况下,如果没有提供起始值,color_image = k4a_capture_get_color_image(capture);
if (color_image)
{
uint8_t* buffer = k4a_image_get_buffer(color_image); // get raw buffer
cv::Mat colorMat(Hrgb, Wrgb, CV_8UC4, (void*)buffer, cv::Mat::AUTO_STEP);
//do something with colorMat
k4a_image_release(color_image);
}
会将第一个元素用作累加器值。显式传递累加器的状态值将确保您的第一个元素也得到处理。
See the initialValue
parameter on the MDN docs
Array.prototype.reduce