当有一个简单的布尔值时,在条件中使用它很简单:
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
答案 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
。如果数组包含true
,indexOf
将返回其索引,从而产生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
,这只是为了好玩并展示另一种不明显的方式。