检查数组成员是否为true

时间:2014-02-11 08:43:27

标签: javascript jquery arrays boolean

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

var running = true;
if(running) {/*do something*/}

使用boolen数组是否有一些技巧?像这样的东西:

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

你可以使用它:

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

如果数组不包含true,则indexOf将返回-1,从false生成!== -1。如果数组包含trueindexOf将返回其索引,从而产生true

稍短的选项:

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

~是一个按位NOT,这会反转indexOf:-1 -> 0, 0 -> -1, 1 -> -2, etc的值。然后双!首先将此值转换为布尔值,然后再次反转,得到布尔输出true,然后数组包含true

答案 2 :(得分:0)

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

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

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

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