【问题标题】:Check if array member is true检查数组成员是否为真
【发布时间】:2014-03-08 22:44:09
【问题描述】:

当有一个简单的布尔值时,在条件中使用它很简单:

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)

但我觉得这不是真正完美编写的代码,它们可能是一些技巧,速记方法.. 可以是普通的 javascript,也可以是 Jquery

【问题讨论】:

    标签: javascript jquery arrays boolean


    【解决方案1】:

    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; });
    

    【讨论】:

    【解决方案2】:

    你可以用这个:

    uploading = running.indexOf(true) !== -1;
    

    如果数组不包含 trueindexOf 将返回 -1,从而导致来自 !== -1false。如果数组包含trueindexOf 将返回它的索引,从而产生true

    一个稍微短一点的选项:

    uploading = !!~running.indexOf(true);
    

    ~ 是按位非,这会将 indexOf 的值反转:-1 -&gt; 0, 0 -&gt; -1, 1 -&gt; -2, etc。然后 double ! 首先将此值转换为布尔值,然后再次反转它,产生一个布尔输出 true 然后数组包含一个 true

    【讨论】:

    • uploading = !!~running.indexOf(true) 如果你想要一个布尔结果
    • running.indexOf(true) &gt; -1
    • 是的,如果index0,那仍然是false。确实,!= 或其他一些运算符似乎是必要的。
    【解决方案3】:

    我只是想到了可以在这种情况下工作的小技巧:

    uploading = !!Math.max.apply(null, [false, true, false, false]); // => true
    

    基本上没有!! 路径,您将获得1(如果至少有一个true)或false(对于数组中的所有false)。 Max 为每个传递的参数调用 ToNumber,所以 true => 1

    注意:您最好使用indexOf,这只是为了好玩,并展示另一种不明显的方式。

    【讨论】:

    • JavaScript,你在做什么? JavaScript,stahp! 我不知道这几乎是可能的:D
    猜你喜欢
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多