解决的查询(关于哈希表)中的解决方案给了我NaN

时间:2013-09-02 02:18:01

标签: javascript

我正在研究下面答案中的功能:

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,]);

3 个答案:

答案 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不在modeMapmodeMap[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