1

我在 javascript 中声明了一个可变长度的字符串数组,其中包含 Dungeons and Dragons 类名。下面是一个例子:

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

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

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

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

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

“巫师 3,巫师 2,终极魔术师 1”

即每个类名后面的数字应该是在数组中找到的重复次数。

任何人都知道如何即时实现这一点,所以当我更改 javascript 文件以向 class_names 添加更多类数据时,它会正确显示在我的 HTML 页面上吗?

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

4

2 回答 2

3

这很容易,只需遍历数组并计算重复次数。

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(", ");
于 2012-06-21T14:05:30.113 回答
0

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

可能性 A:

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

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

可能性 C:使用不同的结构,例如使用对象:var class_names = [{name: "Wizard", level: 3}, {name: "Sorcerer", level: 2}, ...]

于 2012-06-21T14:14:39.833 回答