【问题标题】:Validation one object with another using JavaScript使用 JavaScript 验证一个对象与另一个对象
【发布时间】:2017-08-31 02:41:20
【问题描述】:

我会说明情况。

我们有两个对象;

第一个包含验证规则,例如:

rules = [
   name: {
    length: {
       min: 5
    },
    uppercase: true
   }
]

我们还有另一个对象:

people = {
 name: 'Aleg',
 name: 'Anton',
 name: 'john johnov bla bla'
}

我的问题是 - 使用带有 JavaScript 的 'rules' 对象验证 'people' 对象的最佳方法是什么?

【问题讨论】:

  • “最佳”是一个见仁见智的问题,因此与 StackOverflow 无关。关于您的 people 对象,那应该是一个对象数组吗?您不能在这样的单个对象中具有重复的属性名称。 (假设你解决了这个问题,你不会只是在要验证的对象上使用循环,在 rules 对象中查找相关规则吗?)
  • uppercase: true 验证什么?而people 是一个数组?
  • github.com/flatiron/revalidator ...你可以用这个吗?
  • @nnnnnn 我理解这种方法,但我想找出另一种方法
  • @kukkuz 这是一个例子。可以有不同的规则。

标签: javascript json node.js oop


【解决方案1】:

在数组中声明您的people,并将rules 声明为对象。您可以使用以下内容:

var people = [
    {name: 'Aleg'},
    {name: 'Anton'},
    {name: 'john johnov bla bla'}
];

var rules = {
    name: [
        lengthValidator,
        upperCaseValidator
    ]
};

function lengthValidator(string) {
  var isValid = true;
  // here put your validator logic and update isValid
  return {length: isValid};
}

function upperCaseValidator(string) {
  var isValid = true;
  // here put your validator logic and update isValid
  return {uppercase: isValid};
}

function validator(arrObj) {
    _.each(arrObj, (obj) => {
        obj.validations = [];
        _.each(obj, (value, key) => {
            if(rules[key]) {
                _.each(rules[key], (validatorFunction) => {
                    obj.validations.push(validatorFunction(value));
                })
            }
        });
    });
    return arrObj;
}

var validationResult = validator(people);
console.log(validationResult);

这里可以查看fiddle

注意:我已经使用underscore进行迭代,你可以找到CDNhere

【讨论】:

  • 如果您需要任何说明,请告诉我
猜你喜欢
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多