簡體   English   中英

檢查數組成員是否為真

[英]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,從而導致!== -1false 如果數組包含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.

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