0

如何验证用户没有为两个相反的规则输入相同的值。在此示例中,我们可以在名称为时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"}
];
4

2 回答 2

2

将它们转换为 a 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, '???')

于 2018-12-03T20:11:21.380 回答
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"

于 2018-12-03T20:19:35.170 回答