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



我需要做的 - 简单的任务 - 我正在循环数组。当array[i] === 0;我想+1startarray[i] === 1也一样。 但是当array[i]要回去(回到刚才的位置(时,我不想+1start,我做了那段代码:

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,因此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 次。

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

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

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

最新更新