2016-11-15 88 views
4

問:檢查是否有鍵值中的對象都是假的

我正在尋找一個簡單的解決方案,以檢查是否任何鍵值中的對象是false

我有幾個獨特的密鑰的對象,然而,它們只包含布爾值(truefalse

var ob = { stack: true, 
      overflow: true, 
      website: true 
     }; 

我知道,我能得到鑰匙的數量的一個對象,下面一行:

Object.keys(ob).length // returns 3 

有一個內置的方法來檢查是否有鍵值是假的,而無需通過對象中的每個鍵具有循環?


解決方案:

要檢查是否任何鍵 - 使用​​。

// to check any keys are false 
Object.keys(ob).some(k => !ob[k]); // returns false 

要檢查是否所有鍵 - 使用Array.prototype.every()

// to check if all keys are false 
Object.keys(ob).every(k => !ob[k]); // returns false 

+0

簡短的回答不,你必須循環,循環不顯著負載添加到您的網頁,所以我不明白爲什麼你不能使用它 –

+0

「不必循環對象中的每個鍵」也許,但它更難.... – Feathercrown

+0

你認爲像'Array.map()'「循環」的東西? – BadZen

回答

10

可以使用Array.some方法:

var hasFalseKeys = Object.keys(ob).some(k => !ob[k]); 
+0

您也可以使用Object.values' – Florent

+0

@Florent - 是的 - 邏輯將仍然是相同的 - 獲取值,檢查與'some'或'每個'EM – tymeJV

+0

有沒有類似的方法來檢查/所有/鍵是否是假的? –

0

您可以創建一個功能isAnyKeyValueFalse,重用它在你的應用程序,使用Array#find()返回的第一個元素的數組,滿足在提供的測試功能。

如果沒有對象屬性爲false,則返回false如果有任何屬性爲false,則返回true。

代碼:

var ob = { 
 
    stack: true, 
 
    overflow: true, 
 
    website: true 
 
}; 
 

 
function isAnyKeyValueFalse(obj) { 
 
    return Object.keys(obj).find(key => !obj[key]) ? true : false; 
 
} 
 

 
console.log(isAnyKeyValueFalse(ob));

+1

forEach是一個不錯的選擇,因爲它需要遍歷所有內容。如果找到一個,則無需循環。它工作,效率低下。 – epascarello

+0

@epascarello,你現在可以檢查了嗎..通過使用'Array#find()'改進了代碼' –

相關問題