JavaScript - Map () значение приращения - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть следующая карта:

let map = new Map();
map.set("a", 1);
//Map is now {'a' => 1}

Я хочу изменить значение a на 2 или увеличить его: map.get("a")++;

В настоящее время я используюследующее:

map.set("a", (map.get("a"))+1);

Однако, это не правильно.Кто-нибудь знает более чистый способ сделать это?Возможно ли это?

Ответы [ 4 ]

0 голосов
/ 02 декабря 2018

То, как вы это делаете, прекрасно.Вот как вам нужно это делать, если вы работаете с примитивными значениями.Если вы хотите избежать вызова на map.set, вы должны вернуться к ссылке на значение.Другими словами, тогда вам нужно хранить объект, а не примитив:

let map = new Map();
map.set("a", {val: 1});

И тогда приращение становится:

map.get("a").val++;
0 голосов
/ 02 декабря 2018

Map#get возвращает значение указанного элемента.Он противоположен объекту доступа (object['a']) и не имеет права на левостороннее присвоение.

Вывод заключается в использовании всегда Map#set для установки нового значения.

0 голосов
/ 02 декабря 2018

В соответствии с состояниями спецификации языка ECMAScript® 2015, манипулирование картой основано на prototypes, а методы prototype, назначенные для добавления или извлечения данных на или с карты, - это методы set и get соответственно.

За исключением ненужных скобок вокруг вашего map.get("a"), ваш код в порядке.Вот как карта предназначена для использования.Если вы ищете что-то, что «может» уменьшить длину вашего кода, и если это работает для ваших конкретных требований, вы можете использовать JavaScript Object.

Итак, дорогой, ваш код такой жекак это:

map.set("a", map.get("a")+1);
0 голосов
/ 02 декабря 2018

Я не знаю более чистого способа сделать это, тем не менее, я думаю, что все зависит от контекста вашего кода.

Если вы итерируете массив или что-то еще, и вы хотите увеличить свою переменнуюЯ предлагаю использовать для этого локальную переменную и в конце итерации установить значение на карте.

var i = map.get('a')

values.forEach( el => {
  i += el.someField
})

map.set('a', i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...