javascript - 我需要帮助弄清楚为什么我在这个函数中得到 NaN
问题描述
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
并且只执行else
部分。此时finalObj[str[i]]
是undefined
。最后,递增undefined
( undefined++
) 为您提供NaN
.
尝试使用Object.prototype.hasOwnProperty()
which 返回一个布尔值,指示对象是否具有指定的属性作为其自己的属性:
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"));
推荐阅读
- ios - 带有圆角和阴影但没有边框的 UITextField
- javascript - 如何从函数中删除事件监听器
- javascript - 为什么使用 JavaScript 在我的 PWA 上重复该位置?
- javascript - 使用 eval() - 未捕获的 SyntaxError:pageLoad 处的意外标识符
- vhdl - VHDL 与或反转电路,仿真期间前 5 ns 的输出未确定。内部信号也没有显示在波形上
- c++ - 尝试在 C++ 中实现可变参数 min() 函数
- google-chrome-extension - Chrome 扩展:创建新标签并附加监听器
- sql - 在 SQL Server 存储过程结果中将日期转换为字符串
- numpy - 如何获取不在元组中的 nd.array 元素的索引
- swift - 从 SwiftUI 转到 UIKit 的另一个视图?