已解决查询(关于哈希表)中的解决方案给了我 NaN
A solution in a solved query (about hash table) gives me NaN
我正在研究以下答案中的函数:
获取数组中出现次数最多的元素
但我很伤心地看到它对我不起作用(在 repl.it 上(。所有值最终都是 NaN,无论我如何尝试在第 13 行增加它们。怎么了?
function mode(array)
{
if(array.length === 0)
return null;
var modeMap = {};
var maxEl = array[0], maxCount = 1;
for(var i = 0; i < array.length; i++)
{
var el = array[i];
if(modeMap[el] === null)
modeMap[el] = 1;
else
modeMap[el] = modeMap[el] + 1;
if(modeMap[el] > maxCount)
{
maxEl = el;
maxCount = modeMap[el];
}
}
console.log(modeMap)
return maxEl;
}
mode([4,2,6,2,6,6,6,6,]);
与其比较modeMap[el]=== null
不如检查未定义。
http://plnkr.co/edit/BjVGw5sbQXamOknypnyM?p=preview
function mode(array)
{
if(array.length === 0)
return null;
var modeMap = {};
var maxEl = array[0], maxCount = 1;
for(var i = 0; i < array.length; i++)
{
var el = array[i];
if(modeMap[el] === undefined)
modeMap[el] = 1;
else
modeMap[el] = modeMap[el] + 1;
if(modeMap[el] > maxCount)
{
maxEl = el;
maxCount = modeMap[el];
}
}
console.log(modeMap)
return maxEl;
}
mode([4,2,6,2,6,6,6,6]);
看起来问题是你与null
相比是三等的,当你应该与undefined
进行比较时:
if (modeMap[el] === undefined)
由于el
不在modeMap
,modeMap[el]
将被undefined
,而不是null
。
这里的问题是您正在检查针对null
的严格相等===
,而undefined
是访问Object
中不存在的密钥时返回的值。
检查变量是否undefined
的可靠方法是:
if (typeof variable === "undefined") {
// Do something
}
检查window.undefined
(使用 ===
(对于 1.8.5 之前的 JavaScript 版本是不安全的,因为它是可写的。它从 JavaScript 版本 1.8.5 变为不可写。
相关文章:
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- AJAX HTTP基本身份验证解决方案
- 在chrome web商店中打开时,是否有允许执行内容/后台脚本的解决方案
- Chart.js-添加渐变而不是纯色-实现解决方案
- learnyounode杂耍异步解决方案不工作
- 了解因子分解解决方案
- 提交表单后的最佳解决方案
- 计时器在使用 jQuery 一分钟后没有触发,或者每 1 分钟后给出一些其他解决方案来触发功能
- chrome中的意外全局变量有解决方案吗
- 更好的解决方案HTML元素幻灯片从右侧CSS转换
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- 如何让我的网站上的WEBP图像加载在morzilla firefox中有一个可能的解决方案吗?如果是,那么如何
- JS驱动的常见问题页面的推荐DB解决方案
- 这里有一个更优雅的/DRY/可维护的JS解决方案
- 什么是农民最实用的解决方案;印刷动物”;
- 根据某些条件验证用户输入,而不是将输入输入到数组中,需要最基本的解决方案
- 将数据加载到地图上的更好解决方案
- 我根据解决方案按类对
- 元素进行分组,但需要帮助了解它的工作原理
- 已解决查询(关于哈希表)中的解决方案给了我 NaN