代码之家  ›  专栏  ›  技术社区  ›  bafix2203

循环数组,并添加值以启动javascript

  •  1
  • bafix2203  · 技术社区  · 6 年前

    我需要做的-简单的任务-我正在循环数组。什么时候? array[i] === 0; 我想 +1 start ,相同的 array[i] === 1 . 但是什么时候 array[i] 我不想回去 + 1 开始 我做了代码:

    var start = 0;
    var array = [0,1,0,0,1,0,0,1];
    for (i=0; i < array.length; i ++) {
       if (array[i] === 0) {
          start += 1;
          if (array[i + 1] === 1) {
             start -= 1;
          }
       } 
       else if (array[i] === 1) {
          start += 1;
          if (array[i + 1] === 0) {
             start -= 1;
          }
       }
    }
    console.log(start)
    

    但是如果 array = [0,1,1,1,0,0,0,1,0,0,0,1]; 如果 阵列[I] 会回到很久以前的地方吗?我不想那么做 + 1 开始 .

    想象 0 1 喜欢 -1 + 1 在图表上,所以 console.log(start) array = [0,1,1,1,0,0,0,1,0,0,0,1] 应该是5。

    我的代码是某种硬编码,你有什么办法解决这个问题吗? 感谢您提前回答!

    注释示例

    [0,1,1,1,0,0,0,1,0,0,0,1] 应该产生5的结果;你需要想象 0 == -1 1 == +1 .

    然后数组看起来像 [-1,+1,+1,+1,-1,-1,-1,+1,-1,-1,-1,+1] 从0开始,我们有5个位置,我只有1次。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Nina Scholz    6 年前

    看起来,您需要对数组中的值的更改进行计数。您需要存储最后一个值以检查下一个值。如果最后一个值和实际值不同,您将得到一个更改并需要计数。

    function getChanges(array) {
        var count = 0,
            last = array[0],
            i;
    
        for (i = 1; i < array.length; i++) {
            if (last !== array[i]) {
                count++;
                last = array[i];
            }
        }
        return count;
    }
    
    console.log(getChanges([0, 1, 0, 0, 1, 0, 0, 1]));
    console.log(getChanges([0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1]));
        2
  •  0
  •   Glitch_Doctor    6 年前

    正如@nurdyguy所指出的,你的要求 array[i+1] 将超出最后一个元素的界限。我已经翻转了与前一个元素的比较,并在第二个元素上启动了循环来应对这个问题。

    你好像在计算 +=1 不管二进制结果如何,那么只有 -=1 当数组中的下一个元素不同时,本质上我认为您所要查找的是相反的:

    var start = 0;
    var array = [0,1,0,0,1,0,0,1];
    
    for (i=1; i < array.length; i++) {
      if (array[i] === array[i-1]) {
        start++;
      }
    }
    

    现在,如果您想计算元素在每个步骤中的更改次数,那么您只需翻转逻辑:

    var start = 0;
    var array = [0,1,0,0,1,0,0,1];
    
    for (i=1; i < array.length; i++) {
      if (array[i] !== array[i-1]) {
        start++;
      }
    }
    
    console.log("The result is: " + start) // The result is: 5
    

    我想这是你想要的,如果不是请详细说明。

    编辑:

    抱歉,我测试了你的另一个数组,结果也是5。

    你要找的是:

    var start = 0;
    var array = [0,1,1,1,0,0,0,1,0,0,0,1];
    
    for (i=0; i < array.length; i++) {
      start += array[i];
    }
    
    console.log("The result is: " + start) // The result is: 5
    

    如果0和1的数组仅作为示例,则使用逻辑:

    var start = 0;
    var array = [0,1,1,1,0,0,0,1,0,0,0,1];
    
    for (i=0; i < array.length; i++) {
      array[i] == 1 ? ++start : +-start;
    }
    
    console.log("The result is: " + start) // The result is: 5
    

    或:

    var start = 0;
    var array = [0,1,1,1,0,0,0,1,0,0,0,1];
    
    for (i=0; i < array.length; i++) {
      if (array[i] == 1) {
        ++start 
      }
    }
    
    console.log("The result is: " + start) // The result is: 5
    

    如果数组变为 [-1,1,1,1,-1,-1,-1,1,-1,-1,-1,1] 就像你说的,结果不是 5 它是 -3 ?