汇总字符串的 javascript 数组

Summarizing a javascript array of strings

提问人:Aaron Nichols 提问时间:6/21/2012 最后编辑:ajmAaron Nichols 更新时间:6/22/2012 访问量:309

问:

我有一个用 javascript 声明的可变长度字符串数组,其中包含龙与地下城类名。下面是一个示例:

var class_names = new Array("Wizard", "Wizard", "Wizard", "Sorcerer", 
    "Sorcerer", "Ultimate Magus");

在我的 HTML 中,我使用 javascript 函数从 javascript 文件中设置各种变量,以构建本地显示的页面内容。window.onload

对于名称之类的东西,这很容易:

document.getElementById('charname').innerHTML = name[0];

但是对于类信息,我不想只是抽出一大串类名,我希望它浓缩下来。使用上面的示例“class_names”,我想得到一个如下所示的字符串:

《巫师3》《巫师2》《终极魔导师1》

即每个类名后面的数字应该是数组中发现的重复次数。

任何人都知道如何在飞行中实现这一点,因此当我更改 javascript 文件以向class_names添加更多类数据时,它会适当地显示在我的 HTML 页面上?

提前感谢我在这个宠物项目上获得的任何帮助(即为我活动中的每个角色创建一个 HTML 页面,可以打印为角色表......这比为每个字符手动写一页或在香草纸上手写要好得多)。

javascript html 不显眼的 javascript

评论


答:

3赞 Niet the Dark Absol 6/21/2012 #1

这很简单,只需遍历数组并计算重复次数即可。

var l = class_names.length, i, tmp = {}, ret = [];
for( i=0; i<l; i++) {
    if( !tmp[class_names[i]]) tmp[class_names[i]] = 0;
    tmp[class_names[i]]++;
}
for( i in tmp) {
    if( tmp.hasOwnProperty(i)) {
        ret.push(i+" "+tmp[i]);
    }
}
// output is ret.join(", ");

评论

0赞 Aaron Nichols 6/21/2012
谢谢,这正是我需要的!
0赞 volzotan 6/21/2012 #2

我认为有很多方法可以解决您的问题......

可能性 A:

  1. 如果您不知道这些类是否以正确的顺序显示,请尝试先对数组进行排序,以确保它们被正确分组。
  2. 遍历数组并计算重复次数,即在以下情况下增加计数器 lastElement === class_names[i] 并将最后一个类名的结果追加到结果字符串中,否则将计数器设置回 1。

可能性B: 将数组直接存储为 [“Wizard”, 3, “Sorcerer”, 2, ...] - 这是可能的,因为 JS 不要求数组在每个位置包含相同类型的元素。

可能性 C: 使用不同的结构,例如使用对象: var class_names = [{name: “巫师”, 等级: 3}, {name: “巫师”, 等级: 2}, ...]