我需要做的-简单的任务-我正在循环数组。当array[i] === 0;
我想从+1
到start
,对于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]
会回到很久以前呢?然后,我不希望+1
到start
。
想象一下0
和1
就像图表上的-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 == -1
和1 == +1
。
然后数组看起来像[-1,+1,+1,+1,-1,-1,-1,+1,-1,-1,-1,+1]
,从0开始,我们有5个位置,而我只有1次。
答案 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
?