Javascript - обновить var с упрощенным оператором oneline if - PullRequest
0 голосов
/ 21 ноября 2019

Небольшой вопрос, у меня есть переменная в JS, и я хочу увеличить ее, пока текущее значение меньше 99, иначе оно должно быть сброшено в ноль.

текущий упрощенный код

var age = 35;
age = ( age < 99) ? age+1 : 0;

Теперь это достаточно легко читается человеком. Но что, если мой var будет obj[layer01][gridY][gridX][shape] Это изменит мою строку на что-то вроде:

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

Вопрос

Есть ли способ просто показать это? Что-то вроде:

age = (< 99) ? ++ : 0;

Ответы [ 6 ]

2 голосов
/ 21 ноября 2019

Самый простой способ сделать это - создать функцию:

var obj = {
  a: {
    b: 1
  }
};

function increment(value, max) {
  // this do the same as your ternary operator
  return (value + 1) % max;
}

obj['a']['b'] = increment(obj['a']['b'], 100);

console.log(obj['a']['b']);

// THIS DOES NOT WORK (won't update obj):
var x = obj['a']['b'];
x = increment(x, 100);
console.log(obj['a']['b'], x);
1 голос
/ 21 ноября 2019

Используйте оператор по модулю ( % ), как этот -

var age = 95;
var limit = 100;

function incrementValue()
{
    age = (age+1) % limit;
    document.getElementById('number').value = age;
}

document.getElementById('number').value = age;
<form>
   <input type="number" id="number"/>
   <input type="button" onclick="incrementValue()" value="Increment Value" />
</form>
1 голос
/ 21 ноября 2019

Сохраните переменную в переменной temp, затем выполните операцию:

Попробуйте:

let age = obj[layer01][gridY][gridX][shape];
obj[layer01][gridY][gridX][shape] = ( age < 99) ? (age + 1) : 0;
0 голосов
/ 21 ноября 2019

Прежде всего, я думаю, что это блестящая идея, я нашел следующее решение:

obj[layer01][gridY][gridX][shape] = function(x) { var i = parseInt(x); return 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]);

Она может быть использована повторно ... но на самом деле она не отвечает на ваш вопрос - одна строка кода. Для этого используется троичный оператор - но да, он выглядит некрасиво.

0 голосов
/ 21 ноября 2019

Если бы вы хотели, чтобы это было одной строкой, я думаю, что ваше решение может быть лучшим способом решения. Или вы можете использовать временную переменную или получить более короткую переменную.

0 голосов
/ 21 ноября 2019

Установите obj[layer01][gridY][gridX][shape] в переменную и используйте ее в троичном операторе

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