undefined ? X : Y
всегда будет оценивать Y
, потому что undefined
- ложь.
Я думаю, вы можете захотите проверить, существует ли уже letterData[letter]
и использовать его count
(плюс один), если это так, или использовать 1, если нет. Для этого вам нужно сделать следующее:
function getLetterData(letter) {
letterData[letter] = {
count: letterData[letter] ? letterData[letter].count + 1 : 1,
// ------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
overlap: overlapValue(letter)
};
}
Это работает, потому что если вы никогда не видели letter
раньше, letterData[letter]
приведет к undefined
, но если вы видели его раньше, это будет предыдущий объект.
Обратите внимание, что при этом теряется предыдущее значение letterData[letter].overlap
(если это имеет значение). Из вопроса не ясно, хотите ли вы первое перекрытие или последнее, но вышеприведенное даст вам последнее.
Если вы хотите первый, обновите предыдущий объект, а не замените его:
function getLetterData(letter) {
const entry = letterData[letter];
if (entry) {
++entry.count;
} else {
letterData[letter] = {
count: 1,
overlap: overlapValue(letter)
};
}
}