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

A solution in a solved query (about hash table) gives me NaN

本文关键字:解决方案 NaN 查询 解决 哈希表      更新时间:2023-09-26

我正在研究以下答案中的函数:

获取数组中出现次数最多的元素

但我很伤心地看到它对我不起作用(在 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不在modeMapmodeMap[el]将被undefined,而不是null

这里的问题是您正在检查针对null的严格相等===,而undefined是访问Object中不存在的密钥时返回的值。

检查变量是否undefined的可靠方法是:

if (typeof variable === "undefined") {
    // Do something
}

检查window.undefined(使用 === (对于 1.8.5 之前的 JavaScript 版本是不安全的,因为它是可写的。它从 JavaScript 版本 1.8.5 变为不可写