1

次のような配列があります。

newcount = [
    nomad,
    explorer,
    nomad,
    ship,
    explorer,
    explorer,
    nomad,
    nomad
];

JavaScript を使用してこの配列をループし、最も多く表示される単語を返すにはどうすればよいですか? (私の場合は遊牧民)

4

4 に答える 4

2

ハッシュ マップを使用する必要があります。

このような:

var map = {};
for (var i = 0; i < newcount.length; i++) {
    if (!map[newcount[i]]) {
        map[newcount[i]] = 1;
    } else {
        map[newcount[i]]++;
    }
}

完了したら、マップ上の特定の単語の単語数を照会できます。例えば:

map["nomad"]; // evaluates to 4 in your case.

現在最も多く表示されているものを取得するのは非常に簡単です。マップのすべてのメンバーを確認してください。

例えば:

var appearsMost = "";
var greatestValue = 0;

for (var foo in map) {
    if (map[foo] > greatestValue) {
        greatestValue = map[foo];
        appearsMost = foo;
    }
}

の値を確認しますappearsMost

于 2013-07-24T18:55:11.977 に答える
0

このコードを試すことができます:

    var newcount = ['nomad','explorer','nomad','ship','explorer','explorer','nomad','nomad'];

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]++;  
        if(modeMap[el] > maxCount)
        {
            maxEl = el;
            maxCount = modeMap[el];
        }
    }
    return maxEl;
}

alert(mode(newcount));

このコードは、このページで指定されました:配列内で最も出現頻度の高い要素を取得します

于 2013-07-24T18:58:35.800 に答える
0
function recurrent(arr) {
    var count = {},
        highest = 0,
        ret = null;
    for (var i = 0; i < arr.length; i++) {
        var curr = arr[i];
        count[curr] = typeof count[curr] === "undefined" ? 1 : count[curr] + 1;
    }
    for (var name in count) {
        if (!count.hasOwnProperty(name)) continue;
        var currCount = count[name];
        if (currCount > highest) {
            highest = currCount;
            ret = name;
        }
    }
    return ret;
}

使用法(ここに jsfiddle があります):

var a = [0, 0, 0, 1, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6];
console.log(recurrent(a)); // 5

説明:

count[curr] = typeof count[curr] === "undefined" ? 1 : count[curr] + 1;

この行を使用して、配列内のその要素の数を初期化 (または既に設定されている場合は増加) し、後でそれを使用してどの要素が最も多く表示されるかを確認できるようにします。

if (currCount > highest) {
    highest = currCount;
    ret = name;
}

現在の要素のカウントがこれまでにカウントされた最大値よりも大きい場合、このブロックは最大値を現在の値で更新し、戻り値の名前を現在の値に設定します。

于 2013-07-24T19:04:54.993 に答える