如何检查以下对象,确保每个属性不等于undefined,null或空字符串?
userObj = {
name: {
first: req.body.first,
last: req.body.last
},
location: {
city: req.body.city
},
phone: req.body.phone
}
我可以像if(req.body.first)那样一个一个地检查req.body,但如果我有很多参数,那就太麻烦了。
答案 0 :(得分:1)
您可以简单地使用Array.prototype.some()方法而不是Object.values()
以递归方式实现此方法:
function isThereAnUndefinedValue(obj) {
return Object.values(obj).some(function(v) {
if (typeof v === 'object'){
if(v.length && v.length>0){
return v.some(function(el){
return (typeof el === "object") ? isThereAnUndefinedValue(el) : (el!==0 && el!==false) ? !el : false;
});
}
return isThereAnUndefinedValue(v);
}else {
console.log(v);
return (v!==0 && v!==false) ? !v : false;
}
});
}
在以下功能中,我们将:
object
值。object
,我们使用此值递归调用该函数。<强>演示:强>
这是一个有效的演示:
userObj = {
name: {
first: "req.body.first",
last: [5, 10, 0, 40]
},
location: {
city: "req.body.city"
},
phone: "req.body.phone"
}
function isThereAnUndefinedValue(obj) {
return Object.values(obj).some(function(v) {
if (typeof v === 'object'){
if(v.length && v.length>0){
return v.some(function(el){
return (typeof el === "object") ? isThereAnUndefinedValue(el) : (el!==0 && el!==false) ? !el : false;
});
}
return isThereAnUndefinedValue(v);
}else {
console.log(v);
return (v!==0 && v!==false) ? !v : false;
}
});
}
console.log(isThereAnUndefinedValue(userObj));
您将获得一个以递归方式验证每个对象及其子对象的函数。
答案 1 :(得分:0)
检查真实值(false
,''
,0
,null
,undefined
以外的其他值:
const hasOnlyTruthyValues = obj => Object.values(obj).every(Boolean);
示例:
const hasOnlyTruthyValues = obj => Object.values(obj).every(Boolean);
const object = {
a: '12',
b: 12,
c: ''
};
console.log(hasOnlyTruthyValues(object));
&#13;
您发布的示例(if (res.body.first) ...
)也会检查真实值。如果您想允许false
和0
(这些是假的,但您没有在提问中提及它们),请使用:
const hasOnlyAllowedValues = obj => Object.values(obj).every(v => v || v === 0 || v === false);
答案 2 :(得分:0)
您可以为自己创建一个简单的验证器,如下面的函数
var body = {
a: 1,
b: 3
};
var keys = ['a', 'b', 'c'];
function validate(body, keys) {
for (var i in keys) {
if (!body[keys[i]]) {
return false;
}
}
return true;
}
console.log(validate(body, keys));
答案 3 :(得分:0)
在你的帖子中使用:
if(req.body.first)
我不知道你是否正在检查req和body,但这应该是:
if ( typeof req == "object" && typeof req.body == "object"
&& req.body.first ) {
这是一种更安全的使用前检查方法。
或者,如果你想嵌入对象:
function fnTest(a,b,c) {
return (typeof a == "object" && typeof b == "object" && c) ? c : "";
};
userObj = {name:{
first: fnTest(req, req.body, req.body.first)
,last: fnTest(req,req.body, req.body.last)
},location:{
city: fnTest(req,req.body,req.body.city)
},phone: fnTest(req.body.phone)
};
答案 4 :(得分:0)
您可以使用以下验证器进行检查,它也适用于嵌套对象
function objectValidator(obj){
let ret = true;
for(property in obj){
//console.log(property, obj[property], typeof obj[property]);
if(typeof obj[property] == "object"){
if(obj[property] instanceof Array){
ret = (ret & true);
}
else if(obj[property] == null){
ret = false;
}
else{
ret = (ret & objectValidator(obj[property]));
}
}
else if(typeof obj[property] == "string"){
if(obj[property] == ""){
ret = false;
}
}
else if(typeof obj[property] == "undefined"){
ret = false;
}
}
return ret;
}
let a = {
b : 1,
c :{
d: 2,
e: [3, 4],
f : ""
}
}
console.log(objectValidator(a));