我正在研究下面答案中的功能:
Get the element with the highest occurrence in an array
但我很难过看到它对我不起作用(在repl.it上)。无论我如何尝试在第13行增加它们,所有值最终都是NaN。出了什么问题?
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,]);
答案 0 :(得分:3)
您应该检查未定义的内容,而不是比较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]);
答案 1 :(得分:1)
看起来问题是,与null
相比,当你应该与undefined
进行比较时,你是三等于:{/ p>
if (modeMap[el] === undefined)
由于el
不在modeMap
,modeMap[el]
将是undefined
,而不是null
。
答案 2 :(得分:0)
这里的问题是您正在针对===
检查严格相等null
,而undefined
是您访问Object
中不存在的密钥时返回的值
The robust way检查变量是否为undefined
:
if (typeof variable === "undefined") {
// Do something
}
对{1.8}之前的JavaScript版本进行window.undefined
(使用===
)检查是不安全的,因为它是可写。 It is made non-writable from JavaScript version 1.8.5