我有一组用于验证存储在变量val
中的输入的方法,这样我就可以像val.email
或val["email"]
那样调用它们。我正在尝试创建一个通用函数,该函数将接收一个对象并将验证函数基于键应用于每个值。我的尝试如下:
const validateInput = data => {
let errors = {};
const keys = Object.keys(data);
keys.map(key => {
const error = val[key](data[key]);
errors = { ...errors, ...error };
});
return errors;
};
我收到此错误:
TypeError:val [key]不是函数
但是,以下成功执行:
const validateInput = data => {
let errors = {};
const test = "firstName";
const errors = {...errors, ...val[test](data[test])};
return errors;
};
当我记录键时,我得到了一个字符串数组,当我记录键类型时,我也得到了字符串,所以我不明白为什么它在map函数中不起作用。
谢谢。
答案 0 :(得分:0)
感谢乔纳斯,我能够弄清楚。我正在比较一个函数内部的两个字段(password和password2)。以下代码有效:
const validateInput = data => {
let errors = {};
const keys = Object.keys(val);
keys.map(key => {
let error;
if (data.hasOwnProperty(key)) {
switch (key) {
case "password":
error = val[key](data[key], data[`${key}2`]);
break;
default:
error = val[key](data[key]);
break;
}
errors = { ...errors, ...error };
}
});
return { errors, isValid: isEmpty(errors) };
};