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

循环数组,并添加值以启动Javascript,javascript,Javascript,我需要做的是——简单的任务——我正在循环数组。当数组[i]==0时 我想+1到开始,对于数组[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]

我需要做的是——简单的任务——我正在循环数组。当
数组[i]==0时
我想
+1
开始
,对于
数组[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)
var start=0;
var数组=[0,1,0,0,1,0,0,1];
对于(i=0;i
但是如果
array=[0,1,1,0,0,0,1,0,0,0,1]
,如果
数组[i]
会回到很久以前的位置吗?我不想从
+1
开始

想象
0
1
像图表上的
-1
+1
,所以
控制台上的
日志(开始)
数组=[0,1,1,0,0,0,1,0,0,1]
应该是5

我的代码是某种硬编码,你知道如何修复吗? 感谢您提前回复

评论示例

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


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

正如@nurdyguy指出的,您对
数组[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数组=[0,1,0,0,1,0,0,1];
对于(i=1;i
现在,如果您想计算元素在每个步骤中的更改次数,则只需翻转逻辑:

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
var start=0;
var数组=[0,1,0,0,1,0,0,1];
对于(i=1;i
我想这就是你想要的,如果不是,请详细说明

编辑:

抱歉,我测试了你的另一个数组,结果也是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
var start=0;
var数组=[0,1,1,0,0,0,1,0,0,0,1];
对于(i=0;i
如果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数组=[0,1,1,0,0,0,1,0,0,0,1];
对于(i=0;i
或:

var start=0;
var数组=[0,1,1,0,0,0,1,0,0,0,1];
对于(i=0;i

如果数组像你说的那样变成
[-1,1,1,1,-1,-1,1,-1,-1,-1,1]
,那么结果不是
5
,而是
-3

,你需要计算数组中值的变化。您需要存储最后一个值以检查下一个值。如果最后一个值与实际值不同,则需要进行计数

函数getChanges(数组){
变量计数=0,
last=数组[0],
我
对于(i=1;ilog(getChanges([0,1,1,0,0,0,1,0,1])如果使用
i
则您的
数组[i+1]
将出现问题。请添加一些用例和所需结果。你为什么要计算
0、1
1、
0、相同值或全部
1
?结果5应该来自数组=[0,1,1,1,0,0,0,1,0,0,0,1],你需要将0和1想象成图表上的-1和+1,所以console.log(start)from array=[0,1,1,1,0,0,0,0,1]应该是5,然后数组看起来像这样(-1,+1,+1,+1,-1,-1,+1,-1,-1,-1,+1)从0开始,我们有5个位置,其中我只有1time@bafix2203please看看我的编辑,我想我明白了。我会在你的问题中编辑这些额外的信息,因为这对问题的范围至关重要。
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