我有一个看起来像这样的数组:
newcount = [
nomad,
explorer,
nomad,
ship,
explorer,
explorer,
nomad,
nomad
];
我将如何使用 javascript 循环遍历这个数组并返回出现最多的单词?(就我而言——游牧民族)
我有一个看起来像这样的数组:
newcount = [
nomad,
explorer,
nomad,
ship,
explorer,
explorer,
nomad,
nomad
];
我将如何使用 javascript 循环遍历这个数组并返回出现最多的单词?(就我而言——游牧民族)
您应该使用哈希映射。
像这样:
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
.
你可以试试这段代码:
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));
此代码在此页面中给出:获取数组中出现次数最多的元素
另一种选择是使用 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
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;
}
如果当前元素的计数大于迄今为止计数的最高值,则此块将最高值更新为当前值,并将返回名称设置为当前值。