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

时间:2018-10-23 16:26:40

标签: javascript

我需要做的-简单的任务-我正在循环数组。当array[i] === 0; 我想从+1start,对于array[i] === 1也是一样。 但是当array[i]返回(回到刚才的位置)时,我不想将+1转换为start,而我这样做了:

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];array[i]会回到很久以前呢?然后,我不希望+1start

想象一下01就像图表上的-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 == -11 == +1

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

2 个答案:

答案 0 :(得分:1)

看起来,您需要计算数组中值的变化。您需要存储上一个值以检查下一个值。如果最后一个值和实际值不同,则您进行了更改,需要计数。

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

答案 1 :(得分:0)

正如@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