[英]I need help figuring out why I'm getting NaN in this function
function multipleLetterCount(str){ var finalObj = {}; for(var i = 0; i < str.length; i++){ if(!str[i] in finalObj){ finalObj[str[i]] = 1; } else { finalObj[str[i]]++; } } return finalObj; } console.log(multipleLetterCount("SomeWord"));
我需要幫助弄清楚為什么這些價值會以NaN的形式出現。 謝謝
為什么這些價值觀會以NaN的形式出現
str[i]
表示每次迭代中的不同字符。 當你否定那個字符時!str[i]
變得false
。 因此條件( if(false in finalObj)
為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"));
您可以像這樣簡化代碼
function multipleLetterCount(str){ var finalObj = {}; for(var i = 0; i < str.length; i++){ if (finalObj[str[i]]) { finalObj[str[i]]++; } else { finalObj[str[i]] = 1; } } return finalObj; } console.log(multipleLetterCount("SomeWord"));
請注意,解決問題的方法有很多種,所有這些方法都取決於您需要功能的強大程度。
為簡單起見,而不是if(!str[i] in finalObj)
,而if (!(str[i] in finalObj))
。
怎么樣?
let string = 'SomeWord'; const result = string.split('').reduce((a, b) => { a[b] ? a[b]++ : a[b] = 1 return a; }, {}); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.