0

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

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

但我很难过看到它对我不起作用(在 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,]);
4

3 回答 3

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]);
于 2013-09-02T02:23:30.153 回答
1

看起来问题是你是三等号比较null,当你应该比较时undefined

if (modeMap[el] === undefined)

既然el不在modeMapmodeMap[el]将在undefined,不在null

于 2013-09-02T02:23:26.070 回答
0

这里的问题是您正在检查严格相等性===nullundefined当您访问 中不存在的键时返回的值是Object.

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

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

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

于 2013-09-02T02:40:55.127 回答