如何验证用户没有为两个相反的规则输入相同的值。在此示例中,我们可以在名称为Test
时阻止用户,而在名称不是Test
时阻止用户。目的是显示一条错误消息,告诉用户name_is
和name_is_not
不能具有相同的值。如何为此编写验证?我可以用lodash
const rules = [
{rule: "name_is", value: "Test"},
{rule: "name_is_not", value: "Test"},
{rule: "surname_is", value: "Foo"}
{rule: "surname_is_not", value: "Bar"},
{rule: "name_is", value: "Fux"}
];
答案 0 :(得分:2)
对于每次按键检查Map
,将它们转换为key + _not
,并对其进行迭代:
const rules = [
{rule: "name_is", value: "Test"},
{rule: "name_is_not", value: "Test"},
{rule: "surname_is", value: "Foo"},
{rule: "surname_is_not", value: "Bar"}
]
let m = new Map(rules.map(x => [x.rule, x.value]))
for (let [rule, value] of m.entries())
if (m.get(rule + '_not') === value)
console.log(rule, '???')
答案 1 :(得分:0)
您还可以使用Array.reduce
并每次检查是否存在带有_not
的键及其值。如果有,您可以在累加器的summary
对象中跟踪它:
const rules = [ {rule: "name_is", value: "Test"}, {rule: "surname_is", value: "Foo"}, {rule: "surname_is_not", value: "Bar"}, {rule: "name_is_not", value: "Test"} ]
const result = rules.reduce((r,{rule, value}) => {
let key = rule.replace('_not', '')
r[key] == value ? r.summary[rule] = `same as ${key}` : r[rule] = value
return r
}, {summary: {}}).summary
console.log(result) // "name_is_not": "same as name_is"