有没有办法在一行中更改多个变量的值?下面的代码是有效的,但非常重复。如何以更优雅的方式更改i,j,k的值?也可以为所有三个变量编写if函数,而不是重复三次。
var i = 0;
var j = -1;
var k = -2;
function fn() {
// magic happening;
i += 1;
j += 1;
k += 1;
if (i > 3) {
i = 0;
}
if (j > 3) {
j = 0;
}
if (k > 3) {
k = 0;
}
// more stuff happening
}
答案 0 :(得分:1)
试试这个:
var i = 0;
var j = -1;
var k = -2;
function fn() {
i = (i <= 2) ? ++i : 0;
j = (j <= 2) ? ++j : 0;
k = (k <= 2) ? ++k : 0;
}
或者写另一个函数:
var i = 0;
var j = -1;
var k = -2;
function fn() {
i = calculateIt(i);
j = calculateIt(j);
k = calculateIt(k);
}
function calculateIt(value) {
return (value <= 2) ? ++value : 0;
}
答案 1 :(得分:0)
您可以为一个作业使用单个表达式。
i = i > 2 ? 0 : i + 1;
你可以创建一个保持间隔的功能。
function incAndLimit(v) {
return v > 2 ? 0 : v + 1;
}
// usage
i = incAndLimit(i);
答案 2 :(得分:0)
像这样分配值:
i++,j++,k++;
答案 3 :(得分:0)
如果你可以把变量放在一个数组中,你可以使用ES2015的MyList.AllButReturnFalseIfListIsEmpty(x => A(x) && !B(x));
和lambdas:
.map
您可以将这两个功能组合在一起
var list = [0, -1, -2] // replaces separate i, j, and k
list = list.map(x => x++)
.map(x => x > 3 ? 0 : x);
即使你不能将这些变量放在数组中,我也建议将检查函数放在一个单独的函数中:
list = list.map(x => {
x++;
return x > 3 ? 0 : x
});
答案 4 :(得分:0)
var [i, j, k] = [0, -1, -2]
.map(v => v + 1)
.map(v => v > 3 ? 0 : v);
请注意,此代码需要ES6兼容环境。
答案 5 :(得分:0)
我猜这是双ES6阵列解构
var i = 0,
j = -1,
k = -2,
update = ([x,y,z]) => [++x>3?0:x, ++y>3?0:y, ++z>3?0:z];
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);
[i,j,k] = update([i,j,k]);
console.log(i,j,k);