测试javascript对象中是否存在任何对象

时间:2015-10-17 19:40:21

标签: javascript javascript-objects

所有

我目前正在为“AND”RethinkDB查询编写验证。 包含“gt”(大于)和“lt”(小于)的正确“AND”查询将如下所示:

    "query": {
  "and": [
              { "gt": {"metadata.marvel_comics": 10} },
              { "lt": {"metadata.dc_comics": 50} }
            ]
        }

我正在尝试确保查询的“gt”部分中不包含额外的对象。

不正确的查询将是......

    "query": {
  "and": [
              { "gt": {"metadata.marvel_comics": 10} 
                 "eq": { "metadata.archie_comics": 10 }
              },
              { "lt": {"metadata.dc_comics": 50} }
            ]
        }

如果我遍历“和”数组,我如何检查内部的每个对象是否包含嵌套的任何对象?

我不想测试条目的每种可能性(例如“gt”,“lt”“eq”,“not”等),我只想知道嵌套对象是否存在。如果是这样,验证将失败。

1 个答案:

答案 0 :(得分:0)

只需检查迭代对象有多少个键:

var bQuery = {
  "query": {
    "and": [
      {
      "gt": {
        "metadata.marvel_comics": 10
      },
      "eq": {
        "metadata.archie_comics": 10
      }
    }, {
      "lt": {
        "metadata.dc_comics": 50
      }
    }]
  }
}

var gQuery = {
  "query": {
    "and": [
      {
      "gt": {
        "metadata.marvel_comics": 10
      }
    }, {
      "lt": {
        "metadata.dc_comics": 50
      }
    }]
  }
}

function validateQuery(obj){
  var and = obj.query.and;
  return and.every(function(comm){
    if(Object.keys(comm).length > 1){
      return false;
      } else {
        return true;
        }
    });
  }

console.log(validateQuery(bQuery), validateQuery(gQuery));