Ответ 1
dict[key] = (dict[key] || 0) + 1;
Как добавить проверку, чтобы увидеть, существует ли ключ, и если да, увеличить значение, а если его нет, установить начальное значение?
Примерно такой псевдокод:
var dict = {};
var new_item = "Bill"
If new_item not in dict:
dict[new_item] = 1
else:
dict[new_item] += 1
dict[key] = (dict[key] || 0) + 1;
@snak путь довольно чистый, а оператор ||
делает его очевидным с точки зрения удобочитаемости, поэтому хороший.
Для полноты и мелочей там этот побитовый способ, который тоже довольно хорош:
dict[key] = ~~dict[key] + 1;
Это работает, потому что ~~
превратит много не числовых вещей в 0
после принуждения к Number. Я знаю, что это не очень полное объяснение, но вот результаты, которые вы можете ожидать для разных сценариев:
~~(null)
0
~~(undefined)
0
~~(7)
7
~~({})
0
~~("15")
15
Ваш псевдокод почти идентичен фактическому коду:
if (key in object) {
object[key]++;
} else {
object[key] = 1;
}
Хотя я обычно пишу:
if (!(key in object)) {
object[key] = 0;
}
object[key]++;
Вы можете использовать тернарный оператор (?:) следующим образом:
dictionary[key] ?
dictionary[key].value += 1 :
dictionary[key] = {value: 1};
Сначала вы должны проверить, имеет ли объект собственное свойство с именем 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];
Вы можете сделать это во многих отношениях. В общем случае, если вы хотите знать, имеет ли ключ 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");
}