Как увеличить значение свойства объекта, если оно существует, иначе установить начальное значение?

Как добавить проверку, чтобы увидеть, существует ли ключ, и если да, увеличить значение, а если его нет, установить начальное значение?

Примерно такой псевдокод:

var dict = {};
var new_item = "Bill"

If new_item not in dict:
dict[new_item] = 1

else:

dict[new_item] += 1

Ответы

Ответ 1

dict[key] = (dict[key] || 0) + 1;

Ответ 2

@snak путь довольно чистый, а оператор || делает его очевидным с точки зрения удобочитаемости, поэтому хороший.

Для полноты и мелочей там этот побитовый способ, который тоже довольно хорош:

dict[key] = ~~dict[key] + 1;

Это работает, потому что ~~ превратит много не числовых вещей в 0 после принуждения к Number. Я знаю, что это не очень полное объяснение, но вот результаты, которые вы можете ожидать для разных сценариев:

~~(null)
0
~~(undefined)
0
~~(7)
7
~~({})
0
~~("15")
15

Ответ 3

Ваш псевдокод почти идентичен фактическому коду:

if (key in object) {
    object[key]++;
} else {
    object[key] = 1;
}

Хотя я обычно пишу:

if (!(key in object)) {
    object[key] = 0;
}

object[key]++;

Ответ 4

Вы можете использовать тернарный оператор (?:) следующим образом:

dictionary[key] ? 
    dictionary[key].value += 1 : 
    dictionary[key] = {value: 1};

Ответ 5

Сначала вы должны проверить, имеет ли объект собственное свойство с именем new_item. Если это не так, добавьте его и установите значение 1. В противном случае увеличьте значение:

var dict = {};
var new_item = "Bill"

dict[new_item] = dict.hasOwnProperty(new_item)? ++dict[new_item] : 1;

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

if (!dict.hasOwnProperty(new_item)) {
  dict[new_item] = 0;
}
++dict[new_item];

Ответ 6

Вы можете сделать это во многих отношениях. В общем случае, если вы хотите знать, имеет ли ключ Object ключ, вы используете модификатор in с именем ключа. Это выглядит так:

var key = "key name";
var dict = {};
var hasKey = (key in dict);

Хотя вы можете проверить, установлено ли значение, просто проверяя, является ли оно undefined. Это то, что в JavaScript, если у вас нет инициализированного значения и отправить его через оператор if, он будет действовать как ложный. Это выглядит так:

var dict = {};
if(dict["key"]) {
   print("key: " + dict[key]);
} else {
   print("Missing key");
}