[英]How to check if Javascript object value is array and not empty
在運行一些代碼之前,我需要檢查我正在傳遞的數據(從JSON文件)是否正確。
具體來說,我正在嘗試檢查電子郵件是否存在以及我的正文對象:-至少有一個鍵-每個鍵都有一個值-並且該值必須是一個數組,其中至少包含一個項目。
const email = "john@gmail.com"
const body = {
"fruit": ["apple"],
"vegetables": ["carrot", "beans"]
}
到目前為止,這是我嘗試過的方法:
if (email && Object.keys(body).length > 0 && Object.keys(body) instanceof Array) {
// run some code
} else {
// log error
}
實例化最好的方法在這里嗎? 我想知道是否應該使用.isArray()。 我也應該在Object.keys或Object.value上執行此操作嗎?
謝謝 :)
一種選擇是檢查body
的Object.values
,並查看它們中的每個是否.every
長度為非零的數組:
const email = "john@gmail.com" const body = { "fruit": ["apple"], "vegetables": ["carrot", "beans"] } const ok = email && Object.values(body).every(val => Array.isArray(val) && val.length !== 0); if (ok) { console.log('ok'); } else { // handle error }
問題所在
Object.keys(body) instanceof Array
如果body
是一個對象,它將始終返回true
:
const email = "john@gmail.com" const body = { foo: 'bar' } console.log(Object.keys(body) instanceof Array);
您可能要使用Object.keys
並檢查每個值是一個數組並且至少具有一個值。
Object.keys(body).every(key => Array.isArray(body[key]) && body[key].length !== 0)
對於每個主體鍵,這將檢查它的值是一個數組(使用Array.isArray
),並且其中至少有一個元素(使用body[key].length
)。
此外, .every
僅在所有測試都通過 .every
返回true。
const email = "john@gmail.com" const body = { "fruit": ["apple"], "vegetables": ["carrot", "beans"] } if (email && Object.keys(body).length > 0 && Object.keys(body).every(key => Array.isArray(body[key]) && body[key].length !== 0)) { console.log('hooray!'); } else { // log error }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.