почему значения появляются как NaN
str[i]
представляет разные символы в каждой итерации. Когда вы отрицаете этот символ, например !str[i]
, он становится false
. Следовательно, условие (if(false in finalObj)
) всегда false
и выполняет только часть else
. На данный момент finalObj[str[i]]
является undefined
. Наконец, увеличение undefined
(undefined++
) дает вам NaN
.
Попробуйте с Object.prototype.hasOwnProperty()
, который возвращает логическое значение, указывающее, имеет ли объект указанное свойство как собственное свойство:
function multipleLetterCount(str){
var finalObj = {};
for(var i = 0; i < str.length; i++){
if(!finalObj.hasOwnProperty(str[i])){
finalObj[str[i]] = 1;
} else {
finalObj[str[i]]++;
}
}
return finalObj;
}
console.log(multipleLetterCount("SomeWord"));