簡體   English   中英

我需要幫助弄清楚為什么我在這個函數中得到NaN

[英]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 最后,遞增undefinedundefined++ )會給你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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM