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入っていないのでmodeMap、ありmodeMap[el]ませundefinednull

于 2013-09-02T02:23:26.070 に答える