簡體   English   中英

是否可以檢查一個數組是否所有值都為真,一些值為真,所有值為假

[英]Is it possible to check if an array has all values are true, some are true and all are false

我有一個數組[true,true,true,false,false]是否可以在單個循環中檢查該數組是否具有所有值 true 或某些值 true 或所有值 false 以提高性能。 目前我正在為每個動作使用every()some()

只是想知道是否有比檢查兩次更清潔的方法。

你可以做

const s = new Set(arr);
const mixed = s.size === 2;
const allTrue = !mixed && s.has(true);
const allFalse = !mixed && !allTrue;

然而,在我的簡單測試中,性能提高了大約 8 倍(至少在 Firefox 中),是

const hasTrue = arr.some(v => v);
const hasFalse = arr.some(v => !v);
const mixed = hasTrue && hasFalse;
const allTrue = !mixed && hasTrue;
const allFalse = !mixed && hasFalse;

假設arr中的所有內容都是布爾值,您可以執行以下操作:

const arr = [true, true, true, false, false];

const hasTrue = arr.includes(true);
const hasFalse = arr.includes(false);

const mixed = hasTrue && hasFalse;
const allTrue = hasTrue && !hasFalse;
const allFalse = !hasTrue && hasFalse;

請注意,此解決方案在 JS 中的性能不是特別好,@Bravo 的答案是更好的選擇。

您可以在數組上使用Math.minMath.max 如果結果不同,則兩者都有,如果結果相同,則取決於結果是 0 還是 1,它們分別是false還是true 例如,

 const arr = [true, false, false] const min = Math.min(...arr), max = Math.max(...arr); const mix = min != max; const alltrue = !mix && !!min; const allfalse = !mix && !min; console.log(mix, alltrue, allfalse);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM