所有对象属性都不是空的javascript

时间:2017-08-04 07:44:45

标签: javascript node.js object express undefined

如何检查以下对象,确保每个属性不等于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,但如果我有很多参数,那就太麻烦了。

5 个答案:

答案 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''0nullundefined以外的其他值:

const hasOnlyTruthyValues = obj => Object.values(obj).every(Boolean);

示例:

&#13;
&#13;
const hasOnlyTruthyValues = obj => Object.values(obj).every(Boolean);
const object = {
  a: '12',
  b: 12,
  c: ''
};

console.log(hasOnlyTruthyValues(object));
&#13;
&#13;
&#13;

您发布的示例(if (res.body.first) ...)也会检查真实值。如果您想允许false0(这些是假的,但您没有在提问中提及它们),请使用:

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));