[英]Check if array member is true
當有一個簡單的布爾值時,很容易在以下條件下使用它:
var running = true;
if(running) {/*do something*/}
是否有一些技巧可以通過布爾數組來做到這一點? 像這樣的東西:
var running = [false,false,true,false];
if(running[]){/*do something*/}
目前我是這樣的:
var uploading = false
for(i=0; i< running.length ; i++)
{
if(running[i]) uploading = true;
}
if(uploading)
但是我覺得這不是真正寫得很好的代碼,它們可能是一些技巧和速記方法。
jQuery具有$.inArray
方法:
uploading = $.inArray(running, true) !== -1;
名稱有點誤導,它返回匹配的元素的索引(如果沒有則為-1
)。
JavaScript具有Array#indexOf
,但是在IE8和更早版本中缺少:
uploading = running.indexOf(true) !== -1;
從ES5開始,JavaScript具有Array#some
方法,但是如果您可以使用以上兩種方法中的任意一種來查找特定的值,那都太過分了。 但是,如果您需要調整所有值,它仍然很有用。 例如,如果任何“真實的”值都可以,而不是專門為true
:
uploading = running.some(function(entry) { return !!entry; });
您可以使用以下命令:
uploading = running.indexOf(true) !== -1;
如果數組不包含true
,則indexOf
將返回-1,從而導致!== -1
為false
。 如果數組包含true
,則indexOf
將返回其索引,從而得出true
。
稍微短一點的選項:
uploading = !!~running.indexOf(true);
~
是按位NOT,這會將indexOf中的值取反: -1 -> 0, 0 -> -1, 1 -> -2, etc
0,0- -1 -> 0, 0 -> -1, 1 -> -2, etc
。 然后加倍!
首先將此值轉換為布爾值,然后再次將其求反,得到布爾輸出為true
然后數組包含true
。
我只是想了一些可以在這種情況下起作用的技巧:
uploading = !!Math.max.apply(null, [false, true, false, false]); // => true
基本上沒有!!
path將會得到1
(如果至少有一個true
)或false
(對於數組中的所有false
)。 Max
為每個傳遞的參數調用ToNumber
,因此true
=> 1
。
注意:最好使用indexOf
,這只是為了好玩並演示另一種不明顯的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.