2017-06-01 26 views
0

我有一個對象數組,它看起來像這樣查找對象數組值:從列表中

窗體

{ 
name:"Tom", 
occupation:"Programmer", 
hobbies:" ", 
foodAllergy:"fish", 
favoriteColor:"blue" 
} 

而一個ValidateFieldsArray,看起來像這樣:

["hobbies", "foodAllergy", "name"] 

我需要以驗證是否有ValidateFieldsArray對象數組中的填充了字符串。它會返回false,因爲hobbies是空的。

當前我正在使用For循環來遍歷validateFieldsArray,它工作正常。我想知道是否有更好的解決方案。我也是trim的字符串。

我不能使用lodash,因爲我比較的關鍵不是價值。我想要做這樣的事情,並添加額外的檢查,像string.trim()==「」:

_.result(_.find(UserForm, { key in ValidateFieldsArray}), value); 

回答

3

使用Array.every似乎更合適,檢查每一個鍵在一個陣列

var isValid = ValidateFieldsArray.every(v => UserForm[v] && UserForm[v].trim().length); 
+0

是長度檢查在字符串必要?空字符串是虛假的。還是比我的好。 –

+0

@JaredSmith - 不,長度檢查可能不是必需的 – adeneo

3
let isValid = validateFieldsArray.reduce((obj, k) => { 
    return (obj && obj[k].trim()) ? obj : false; 
}, UserForm); 

返回UserForm對象,如果有效,否則返回布爾false。對象必須有一個不僅有空白的字符串。如果您有var替換let然後箭頭函數的代碼是有效的ES 5和工作回到IE 9