在一行javascript中更改几个变量的值

时间:2016-09-06 08:45:14

标签: javascript variables

有没有办法在一行中更改多个变量的值?下面的代码是有效的,但非常重复。如何以更优雅的方式更改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
}

6 个答案:

答案 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);