我正在寻找一种好的/优雅的方法来验证 javascript 对象是否具有所需的属性,到目前为止,这就是我所拥有的:
var fields = ['name','age','address'];
var info = {
name: "John Doe",
age: "",
phone: "123-456-7890"
}
var validateFields = function(o, required_fields) {
required_fields.forEach(function(field){
if(o.hasOwnProperty(field)){
if(o[field]){
console.log(field + ": " + o[field]);
}else{
console.log(field + " exists but is empty");
}
}else{
console.log(field + " doesn't exist in object");
}
});
}
validateFields(info, fields);
有没有更有效/更优雅的方式在纯 javascript 中执行此操作?
编辑: 好的,我很高兴我问了,因为我完全错过了一堆可能的条件,比如零。
窗外的优雅,这对于验证函数来说如何?还有其他我应该检查的情况吗?
var fields = ['name','age','address'];
var info = {
name: "John Doe",
age: 0,
address: false,
phone: "123-456-7890"
}
var validateFields = function(o, required_fields, null_valid, zero_valid, empty_valid) {
var invalid_fields = [];
required_fields.forEach(function(field){
if(field in o){
switch(o[field]){
case '':
console.log(field + " exists but is empty");
if(!empty_valid){
invalid_fields.push(o[field]);
}
break;
case undefined:
console.log(field + " exists but is undefined");
invalid_fields.push(o[field]);
break;
case null:
console.log(field + " exists but is null");
if(!null_valid){
invalid_fields.push(o[field]);
}
break;
case 0:
console.log(field + " exists and the value is 0");
if(!zero_valid){
}
invalid_fields.push(o[field]);
break;
default:
console.log(field + ": " + o[field]);
break;
}
}else{
console.log(field + " doesn't exist in object");
invalid_fields.push(o[field]);
}
});
return invalid_fields;
}
var invalid = validateFields(info, fields, true, true, false);
console.log(invalid);
if(invalid.length >0){
console.log("ERROR: Missing fields");
}else{
console.log("Fields are valid");
}
原文由 Mankind1023 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果你想要“优雅”,你正在寻找的东西叫做
schema
:要解决 @AndreFigueiredo 的学究气,您还可以检查
object
是否完全包含该属性:更新
这是一个使用 ECMAScript 6 版本的特性的现代化解决方案,包括 解构、 箭头函数、
Object.entries()
、 模板文字 和for...of
:而执行
required
和validate
的版本分别检查: