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

另一种选择是使用 count 方法扩展数组原型;

Array.prototype.count = function(obj){
    var count = this.length;
    if(typeof(obj) !== "undefined"){
        var array = this.slice(0), count = 0; // clone array and reset count
        for(i = 0; i < array.length; i++){
            if(array[i] == obj){
                count++;
            }
        }
    }
    return count;
}

用法;

newcount.count("nomad"); // 4
于 2013-07-24T19:00:46.493 回答
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 回答