我有多种原因导致密码验证失败:
const failures = schema.validate(password.value, { list: true });
console.log(failues);
// => [ 'min', 'uppercase', 'digits' ]
我也有一个对象数组。 key
始终是failures
数组的潜在值:
const msg = [
{ key: 'min', message: 'minimum' },
{ key: 'max', message: 'maximum' },
{ key: 'uppercase', message: 'need a uppercase' },
{ key: 'lowercase', message: 'need a lowercase' },
{ key: 'digits', message: 'must have digits' },
{ key: 'spaces', message: 'no spaces' },
{ key: 'oneOf', message: 'is not one of' },
];
我想映射到failures
数组并从msg
返回相关消息以显示更连贯的错误消息。
答案 0 :(得分:2)
对于verse:version_number
中的每个值,从failures
中拉出相应的项目。
但是,我是否建议将msg
创建为字典?
msg
这将使执行此操作更加容易。
const msg = {
'min': 'minimum',
'max': 'maximum',
...
};
答案 1 :(得分:2)
const failures = schema.validate(password.value, { list: true });
console.log(failures);
// => [ 'min', 'uppercase', 'digits' ]
const msg = [
{ key: 'min', message: 'minimum' },
{ key: 'max', message: 'maximum' },
{ key: 'uppercase', message: 'need a uppercase' },
{ key: 'lowercase', message: 'need a lowercase' },
{ key: 'digits', message: 'must have digits' },
{ key: 'spaces', message: 'no spaces' },
{ key: 'oneOf', message: 'is not one of' },
];
const listOfMessages = msgs
.filter(msg => failures.includes(msg.key)) // Get the appropriate object matching the error
.map(msg => msg.message) // Only get the message
console.log(listOfMessages) // ['minimum', 'need a uppercase', 'must have digits']
答案 2 :(得分:1)
您可以使用array.filter() and array.map()
来实现所需的目标:
const messages = msg.filter(r=>failures.indexOf(r.key)!==-1).map(r=>r.message)// ["minimum", "need a uppercase", "must have digits"]
您可以根据自己的意愿来进行处理,即使您加入messages数组,也不会形成连贯的句子。我也同意上面的建议,改用Dict
之类的Object
而不是您现在使用的对象数组。
答案 3 :(得分:0)
// this is a very verbose way to store this information, also hard to fetch by key
const msg = [
{ key: 'min', message: 'minimum' },
{ key: 'max', message: 'maximum' },
{ key: 'uppercase', message: 'need a uppercase' },
{ key: 'lowercase', message: 'need a lowercase' },
{ key: 'digits', message: 'must have digits' },
{ key: 'spaces', message: 'no spaces' },
{ key: 'oneOf', message: 'is not one of' },
];
const failures = [
'min',
'uppercase',
'digits',
'something-not-mapped'
];
// better use a map
const msg2 = msg.reduce((acc, item) => {
acc[item.key] = item.message;
return acc;
}, {});
console.log("msg2:", msg2);
// now you can do:
console.log("mapped failures:", failures.map(key => msg2[key] || key));
.as-console-wrapper{top:0;max-height:100%!important}
我认为带有注释的代码是不言自明的。