Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-使用简化的单行if语句更新变量_Javascript_If Statement - Fatal编程技术网

Javascript-使用简化的单行if语句更新变量

Javascript-使用简化的单行if语句更新变量,javascript,if-statement,Javascript,If Statement,小问题,我在JS中有一个var,只要当前值小于99,我就想增加它,否则应该重置为零 现行简化代码 问题 有没有办法简化这个?比如: obj[layer01][gridY][gridX][shape] = ( obj[layer01][gridY][gridX][shape] < 99) ? obj[layer01][gridY][gridX][shape]+1 : 0; age = (< 99) ? ++ : 0; age=(

小问题,我在JS中有一个var,只要当前值小于99,我就想增加它,否则应该重置为零

现行简化代码 问题 有没有办法简化这个?比如:

obj[layer01][gridY][gridX][shape] = ( obj[layer01][gridY][gridX][shape] < 99) ? obj[layer01][gridY][gridX][shape]+1 : 0;
age = (< 99) ? ++ : 0;
age=(<99)?+:0;

obj[layer01][gridY][gridX][shape]
设置为一个变量,并在三元运算符中使用它

var x=obj[layer01][gridY][gridX][shape]
x=(x<99)?x+1:0;

obj[layer01][gridY][gridX][shape]=x将变量存储到
temp
变量中,然后执行以下操作:

试试这个:

let age = obj[layer01][gridY][gridX][shape];
obj[layer01][gridY][gridX][shape] = ( age < 99) ? (age + 1) : 0;
let age=obj[layer01][gridY][gridX][shape];
obj[layer01][gridY][gridX][shape]=(年龄<99岁)?(年龄+1):0;
像这样使用模运算
(%)
运算符-

var年龄=95岁;
var限值=100;
函数增量值()
{
年龄=(年龄+1)%限制;
document.getElementById('number')。值=年龄;
}
document.getElementById('number')。值=年龄


如果您希望将其作为一行,我认为您的解决方案可能是解决此问题的最佳方法。或者,您可以使用临时变量,也可以使用if-else来获取较短的变量。

最简单的方法是创建一个函数:

var obj={
a:{
b:1
}
};
函数增量(最大值){
//这与三元运算符的操作相同
返回值(值+1)%max;
}
obj['a']['b']=增量(obj['a']['b']],100);
log(obj['a']['b']);
//这不起作用(不会更新obj):
var x=obj['a']['b'];
x=增量(x,100);

log(obj['a']['b'],x)可以得到的最小值是:

let y = obj[layer01][gridY][gridX], x = y[shape];
y[shape] = (x < 99) ? x + 1 : 0;

首先,我认为这是一个绝妙的想法,我找到了以下解决方案:

obj[layer01][gridY][gridX][shape] = function(x) { var i = parseInt(x); return i < 99 ? ++i : 0; }(obj[layer01][gridY][gridX][shape]);
obj[layer01][gridY][gridX][shape]=函数(x){var i=parseInt(x);返回i<99?++i:0;}(obj[layer01][gridY][gridX][shape]);
这里最重要的是parseInt调用——内联函数使它变得简单了一点,但我会创建一个单独的函数并像这样调用它:

var myfn = function(x) { var i = parseInt(x); return i < 99 ? ++i : 0; };
obj[layer01][gridY][gridX][shape] = myfn(obj[layer01][gridY][gridX][shape]);
var myfn=function(x){var i=parseInt(x);返回i<99?++i:0;};
obj[layer01][gridY][gridX][shape]=myfn(obj[layer01][gridY][gridX][shape]);

它可以重复使用。。但它并没有真正回答你的问题——一行代码。三元运算符用于此,但它看起来很难看。

我不相信这会起作用,
x
不是对
obj[layer01][gridY][gridX][shape]的引用。
这不起作用
x
与obj[layer01][gridY][gridX][shape]
相关,但不是同义词;分配给
x
不会修改
obj[layer01][gridY][gridX][shape]
。您需要保留一个未解决的级别。我相信这对Java是可行的,但对JSIt是不行的。它对Java也是不行的。你需要一个有别名引用的语言,比如C++或PHP。如果数字是不可变的(JavaScript、java、C等),这在任何语言中都是行不通的。你需要一个显式的内存引用来引用这个值(C或C++),嗯,我喜欢这个。这是一个反复出现的“问题”,它简洁易读。非常感谢。
((x, a) => x[a] = x[a] < 99 ? x[a] + 1 : 0)(obj[layer01][gridY][gridX], shape)
obj[layer01][gridY][gridX][shape] = (obj[layer01][gridY][gridX][shape] + 1) % 100;
obj[layer01][gridY][gridX][shape] = function(x) { var i = parseInt(x); return i < 99 ? ++i : 0; }(obj[layer01][gridY][gridX][shape]);
var myfn = function(x) { var i = parseInt(x); return i < 99 ? ++i : 0; };
obj[layer01][gridY][gridX][shape] = myfn(obj[layer01][gridY][gridX][shape]);