我需要做的是-简单的任务-我循环数组。当我想要+1
到start
时,array[i] === 1
也是一样的。但是,当array[i]
返回(回到刚才的位置)时,我不想对start
执行+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];
,如果array[i]
会回到很久以前的地方呢?我不想要+1
to start
。
想象一下图表上的0
和1
就像-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 == -1
和1 == +1
。
然后数组看起来像[-1,+1,+1,+1,-1,-1,-1,+1,-1,-1,-1,+1]
,从0开始,我们有5个位置,而我只有1次。
发布于 2018-10-24 03:31:03
看起来,您需要计算数组中值的更改。您需要存储最后一个值,以便检查下一个值。如果最后一个值与实际值不同,则说明发生了变化,需要进行计数。
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]));
发布于 2018-10-24 00:41:24
正如@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
https://stackoverflow.com/questions/52953781
复制相似问题