Javascript 通过对象验证属性?

Javascript 通过对象验证属性?,javascript,node.js,Javascript,Node.js,如何通过对象验证属性?我已经在checkProperty 我希望missingFields返回Batch。缺少Name 当前正在输出['Batch.Id','Batch.Name'],这是错误的 let数据={ 批次:{ Id:123, }, 总数:100, } 让checkProperty=['Total','Batch.Id','Batch.Name']; 设missingFields=[]; checkProperty.forEach(字段=>{ 如果(!数据[字段]){ missing

如何通过对象验证属性?我已经在
checkProperty

我希望
missingFields
返回
Batch。缺少Name

当前正在输出
['Batch.Id','Batch.Name']
,这是错误的

let数据={
批次:{
Id:123,
},
总数:100,
}
让checkProperty=['Total','Batch.Id','Batch.Name'];
设missingFields=[];
checkProperty.forEach(字段=>{
如果(!数据[字段]){
missingFields.push(字段);
}
});

控制台日志(丢失字段)在点上拆分后,必须使用类似于
reduce
的方法来检查嵌套值是否存在:

let数据={
批次:{
Id:123,
},
总数:100,
}
让checkProperty=['Total','Batch.Id','Batch.Name'];
设missingFields=[];
checkProperty.forEach(字段=>{
const val=field.split('.').reduce((a,prop)=>!a?null:a[prop],data);
如果(!val){
missingFields.push(字段);
}
});

控制台日志(丢失字段)您可以使用此

当执行
data[Batch.Id]
操作时,此
data[field]
尝试在对象的第一级键进行检查的原因。在本例中,我们没有任何键,例如
Batch.Id

For our case we need `data[Batch][Id]` something like this which first searches 
 for `Batch` property and than or the found value it searches for `Id`.
let数据={
批次:{
Id:123,
},
总数:100,
}
让checkProperty=['Total','Batch.Id','Batch.Name'];
设missingFields=[];
checkProperty.forEach(字段=>{
让温度=字段拆分('.')。减少((o,e)=>{
返回o[e]| |数据[e]
},{});
如果(!temp){
missingFields.push(字段);
}
});

控制台日志(丢失字段)如果您可以使用其他库,Ajv非常适合于此。您可以创建一个模式并验证它,而不是自己创建所有逻辑

var schema = {
  "type": "object",
  "properties": {
    "Batch": { 
        "type": "object", 
        "required": ["Id", "Name"],
        "properties": 
        {
        "Id":{},
        "Name":{},
        },
       },
    "Total": {}
  }
};


let json = {
  Batch: {
    Id: 123,
  },
  Total: 100,
}

var ajv = new Ajv({
    removeAdditional: 'all',
    allErrors: true
});

var validate = ajv.compile(schema);
var result = validate(json);
console.log('Result: ', result);
console.log('Errors: ', validate.errors);
返回以下错误消息:

dataPath:".Batch"
keyword:"required"
message:"should have required property 'Name'"
params:{missingProperty: "Name"}
schemaPath:"#/properties/Batch/required"

我维护一个最小的JavaScript类型检查库。它可以按照你的期望做一些事情。也许值得一看。