返回javascript中出现最多的数组中的单词

时间:2013-07-24 18:52:17

标签: javascript arrays

我有一个如下所示的数组:

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

我如何使用javascript循环遍历此数组并返回最常出现的单词? (在我的情况下 - 游牧民族)

4 个答案:

答案 0 :(得分: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

的值

答案 1 :(得分: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));

此代码在此页面中给出:Get the element with the highest occurrence in an array

答案 2 :(得分: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

答案 3 :(得分: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;
}

使用(here you find the 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;
}

如果当前元素的计数大于到目前为止计算的最高值,则此块将使用当前元素更新最高值,并将返回名称设置为当前元素。