首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环数组,并添加值以启动Javascript

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

Stack Overflow用户
提问于 2018-10-24 00:26:40
回答 2查看 59关注 0票数 1

我需要做的是-简单的任务-我循环数组。当我想要+1start时,array[i] === 1也是一样的。但是,当array[i]返回(回到刚才的位置)时,我不想对start执行+1操作,我已经这样做了:

代码语言:javascript
复制
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]会回到很久以前的地方呢?我不想要+1 to start

想象一下图表上的01就像-1+1,那么来自array = [0,1,1,1,0,0,0,1,0,0,0,1]console.log(start)应该是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次。

EN

回答 2

Stack Overflow用户

发布于 2018-10-24 03:31:03

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-10-24 00:41:24

正如@nurdyguy所指出的那样,您对array[i+1]的调用将超出最后一个元素的界限。我已经翻转了与前一个元素的比较,并在第二个元素上开始了循环,以应对这种情况。

当数组中的下一个元素不同时,你似乎是在计算+=1,而不考虑二进制结果,然后只计算-=1,所以从本质上讲,我认为你得到了与你所寻找的相反的结果:

代码语言:javascript
复制
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++;
  }
}

现在,如果你想计算元素在每一步中变化的次数,那么你可以反转逻辑:

代码语言:javascript
复制
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。

你要找的是这样的:

代码语言:javascript
复制
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的数组仅作为示例,则使用逻辑:

代码语言:javascript
复制
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

或者:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52953781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档