这段代码中的if语句是做什么的?

时间:2014-06-01 11:16:08

标签: javascript if-statement combinations operator-keyword subset

此代码遍历数组获取数组项的子集, 并将某些数字推送到result数组。我只是无法弄清楚这个if语句如何过滤​​数字:

if( (mask & (1 << i)) !== 0){
   result.push(input[i]);

究竟是什么意思?

 (function(input){
    var result, mask, total = Math.pow(2, input.length);
        for(mask = 0; mask < total; mask++){ //O(2^n)
            result = [];
            i = input.length - 1; //O(n)
            debug(i)
            do{
                if( (mask & (1 << i)) !== 0){
                    result.push(input[i]);
                }
            }while(i--);
            debug(result);
        }
    })(['1','2','3']);

1 个答案:

答案 0 :(得分:0)

mask变量似乎是用于从input数组中选择数字子集的变量。假设输入的大小为N,掩码为N位数。因此,input[i]仅在imask为1时才会被选中。

mask & (1 << i)) !== 0

检查掩码的i位是否为0。如果不是0,那么input[i]将被放入result