2015-10-17 66 views
-2

全部,测试JavaScript对象中是否存在ANY对象

我正在为“AND”RethinkDB查询编写验证。 一个适当的“和”含有查询“GT”(大于)和“LT”(小于)看起来像:

"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”等),我只想知道是否存在嵌套对象。如果是这样,验证将失败。

+0

http://stackoverflow.com/questions/2631001/javascript-test-for-existence-of-nested -object-key –

回答

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

+0

优秀。由于我目前缺乏JS知识,所以我甚至不知道“every()”方法存在。谢谢! – edcincy