JavaScript中的if else / for循环

时间:2018-10-28 12:27:02

标签: javascript for-loop if-statement

有什么方法可以使该if-else语句通用化。现在,TruthArray包含从t1到t4的值。我正在寻找一种为任意数量的值t5,t6等创建通用解决方案的方法。我没有得到如何告诉for循环根据真值数组的长度创建越来越多的嵌套if语句的方法。谢谢。 代码说明: 首先,我要检查t1是否为真。如果是这样,那么positionArray中的第一个元素将为“ left”。现在,当t1已经确定为true时,我想检查t2的值。如果t2为true,则将positionArray中的第二个元素设置为“ right”。之后,当t1和t2已经为真时,我想检查t3是否为真,并将positionArray的第三个元素设置为左。然后我在t1,t2,t3都为真时检查t4是否为真,依此类推。因此,positionArray的连续元素将是右,然后是左,然后是右,然后是左,依此类推。 现在,如果t1不正确,那么我想从t2开始相同的过程。如果t1不为真,则位置数组的第一个元素将不确定。如果t1不是true且t2是true,则positionArray的第二个元素设置为'left',并且连续的元素将是right,left,right等。 如果t1和t2都不为真,则过程将从t3开始,依此类推。

            var truthArray = [t1, t2, t3, t4]; 
            var positionArray = [];
            var i;        
  
           
            if (truthArray[0] === true) {
                positionArray[0] = 'left';
                if (truthArray[1] === true) {
                    positionArray[1] = 'right';
                    if (truthArray[2] === true) {
                        positionArray[2] = 'left';
                        if (truthArray[3] === true) {
                            positionArray[3] = 'right';
                        }
                    }
                    else if (truthArray[3] === true) {
                        positionArray[3] = 'left';
                    }
                }
                else if (truthArray[2] === true) {
                    positionArray[2] = 'right';
                    if (truthArray[3] === true) {
                        positionArray[3] = 'left';
                    }
                }
                else if (truthArray[3] === true) {
                    positionArray[3] = 'right';
                }
            }
            else if (truthArray[1] === true) {
                positionArray[1] = 'left';
                if (truthArray[2] === true) {
                    positionArray[2] = 'right';
                    if (truthArray[3] === true) {
                        positionArray[3] = 'left';
                    }
                }
                else if (truthArray[3] === true) {
                    positionArray[3] = 'right';
                }
            }
            else if (truthArray[2] === true) {
                positionArray[2] = 'left';
                if (truthArray[3] === true) {
                    positionArray[3] = 'right';
                }
            }
            else if (truthArray[3] === true) {
                positionArray[3] = 'left';
            }
            

3 个答案:

答案 0 :(得分:4)

希望这可能对您有所帮助,如果您遇到任何问题,请告诉我

var truthArray = [false, false, true]; 
var positionArray = [];
var positionArrayValues = ['left','right'];
var offsetArray = [];
var start = 0, end = truthArray.length;      
function traverseFurther(index,positionArrayIndex) {
    if(index === end)
        return;
    if(truthArray[index] === true) {
        positionArray[index] = positionArrayValues[positionArrayIndex];
        traverseFurther(index + 1, positionArrayIndex === 0 ? 1 : 0);
    } else {
        traverseFurther(index + 1,positionArrayIndex);
    }
}
traverseFurther(start, 0);

答案 1 :(得分:0)

因此,您想遍历truthValues并构建一个positionArray,其中如果(truthValue == false)将undefined添加到positionArray < strong> else 将'left''right'添加到positionArray中,这样'left''right'总是交替出现吗?

这是您的方法。

    //fill truthArray with 10 random boolean values
    const truthArray = [];
    for (var i = 0; i < 10; i++) {
      truthArray.push(Math.random() > 0.5);
    }
    
    //calc(truthArray) and map the result (and truthInput) to make it easier to read
    const input = truthArray.map(t => t?'T':'F');
    const output = calc(truthArray).map(v => {
      if (v === 'left') return 'L';
      if (v === 'right') return 'R';
      if (v === undefined) return '-';
    });
    
    //display truthInput and result
    console.log('T is true, F is false');
    console.log('L is left, R is right, - is undefined');
    console.log(input.join());
    console.log(output.join());
    
    function calc(truthArray) {
      var trueCount = 0;
      const result = [];
      for (var truthVal of truthArray) {
        if (truthVal) {
          const position = (trueCount % 2 == 0)
            ? 'left'
            : 'right';
          result.push(position);
          trueCount++;
        } else {
          result.push(undefined);
        }
      }
      
      return result;
    }

答案 2 :(得分:0)

您可以映射支票并返回一个切换值或undefined

它通过检查元素的值并使用带有对象和值pos的{​​{3}}来工作。通过将pos作为对象的flip-flop来为pos分配新值来更改此值。

rl = { right: 'left', left: 'right' }
pos = 'right';
pos = rl[pos]; // left
pos = rl[pos]; // right
pos = rl[pos]; // left
pos = rl[pos]; // right
// and so on ...

如果元素不是property accessor,则undefined映射到结果集。

var truthArray = [false, true, false, true],
    lr = { right: 'left', left: 'right' },
    pos = 'right',
    positionArray = truthArray.map(b => b ? pos = lr[pos] : undefined);

console.log(positionArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }

要获得其他图案,例如

['left', 'left', 'right', 'right']

您可以增加索引并使用余数运算符对其进行调整,然后向右取一个位偏移的值,该值将值除以2并返回整数值。

var truthArray = [true, false, true, false, true, false, true, false, true],
    lr = ['left', 'right'],
    pos = 3,
    positionArray = truthArray.map(b => b ? lr[++pos, (pos %= 4) >> 1] : undefined);

console.log(positionArray);
.as-console-wrapper { max-height: 100% !important; top: 0; }