所以,我在一个函数和一个数组(称为“card_idx”)中设置了一个var,我希望将var设置为0,直到数组中达到某个数字,但数字不会增加按顺序(1..2..3..4额外)。它根据人的演奏方式跳转(所以它可以像... 1 ... 2 ...... 2.1 .... 5 .. ..3.2 ...)。我希望将var设置为0,直到达到特定的数字,然后将其更改为1.
我尝试将其设置为:
var x=0;
if(card_idx == 3.2){
x=1
}
但是当3.2不再有时它会变回零,我怎么做才能保持1?
答案 0 :(得分:0)
你可以试试这个。使用额外的布尔值来检查是否已设置x
。
请注意,您的变量不在迭代范围内。
var x = 0;
var hasSet = false;
// start looping
if (card_idx == 3.2 && hasSet = false) {
x = 1
hasSet = true;
}
或者也许(如果你的问题更清楚),这也可以解决。
var x = 0;
// start looping
if (card_idx == 3.2 && x <= 0) {
x = 1
}
答案 1 :(得分:0)
虽然您的示例不足以重现问题,但我想您可能会遇到可变范围的问题。
JS变量本地作用于它们周围的函数,这对您有利。如果在遍历数据的函数的开头声明x
,则循环可以修改它,并且在循环完成后将保留该值:
function crunch(data) {
var x = 0;
data.forEach(function (item) {
if (item.index === 3.2) {
x = 1;
}
});
console.log(x);
}
如果item
中的任何data
index
3.2
x
,1
将设置为forEach
并打印到控制台结束。回调x
使用闭包来抓取for
,但这与x
循环的效果相同。
在循环中使用crunch
,在crunch
返回之前不会重置该值。每次调用x
时,0
都会设置为1
,如果某个项目具有正确的索引,则可能会设置为crunch
,并且会保留该值直到结束forEach
。
现在,使用x
,如果您要在1>中声明crunch
循环回调而不是function crunch(data) {
data.forEach(function (item) {
var x = 0;
if (item.index === 3.2) {
x = 1;
}
});
}
,则每次都会重置:
var
由于0
在功能级别运行,因此不保持其值,并且每个项目都为List list = ["a", "b", "c", "a", "d", "c", "a"]
。