我有一个如下所示的数组:
newcount = [
nomad,
explorer,
nomad,
ship,
explorer,
explorer,
nomad,
nomad
];
我如何使用javascript循环遍历此数组并返回最常出现的单词? (在我的情况下 - 游牧民族)
答案 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;
}
如果当前元素的计数大于到目前为止计算的最高值,则此块将使用当前元素更新最高值,并将返回名称设置为当前元素。