Добавить к объекту JS или увеличить количество, если ключ существует

1

Я пытаюсь добавить ключ к объекту, если он не существует, или увеличить его количество, если оно уже присутствует. Следующий код правильно добавляет новый ключ, если он не существует, но не увеличивает его количество, если оно уже выполняется. Вместо этого он возвращает {UniqueResult1:NaN, UniqueResult2:NaN}.

let detectionHash = {};
    function onDetected(result) {
        detectionHash[result.code]++;
        if(detectionHash[result.code] >= 5) {
          //here where I want to be
        }
    }

Как увеличить количество ключей, если оно уже существует?

  • 1
    полный код и как вы используете его, чтобы получить неожиданное поведение
Теги:
increment

2 ответа

3
Лучший ответ

Вы можете взять значение или значение по умолчанию, равное нулю, и добавить его.

Не существующее свойство возвращает undefined, что является ложным. Следующий логический ИЛИ || проверяет это значение и принимает следующее значение нуля для приращения.

detectionHash[result.code] = (detectionHash[result.code] || 0) + 1;
  • 0
    Разве это не заменит ключи объекта? Что я действительно ищу, так это хранить количество каждого уникального ключа. Вторая часть (уникальный ключ) я разобрался, просто не первая часть.
  • 0
    Нет, это только изменит значение для этого конкретного ключа.
Показать ещё 1 комментарий
0

Если вы запрашиваете ключ, который не существует, он будет иметь тип "undefined":

var abc=[];
abc[5] = 'hi';
console.log(typeof abc[3]); //it will be "undefined", as a string (in quotes)

Так:

let detectionHash = {};
    function onDetected(result) {
        //does the key exists?
        if (typeof detectionHash[result.code] !== "undefined") 
            detectionHash[result.code]++; //exist. increment
        else
            detectionHash[result.code]=0; //doesn't exist. create
        if(detectionHash[result.code] >= 5) {
          //here where I want to be
        }
    }
  • 0
    0 или 1. Вы не говорите, какое значение вы хотите в своем новом ключе

Ещё вопросы

Сообщество Overcoder
Наверх
Меню