2015-10-17 70 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