总结一个javascript字符串数组

时间:2012-06-21 14:00:33

标签: javascript html unobtrusive-javascript

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

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

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

对于像名字这样的东西,这很容易:

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

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

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

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

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

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

2 个答案:

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

答案 1 :(得分:0)

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

可能性A:

  1. 如果您不知道这些类是否以正确的顺序出现,请首先尝试对数组进行排序,以确保它们正确分组。
  2. 迭代数组并计算重复次数,即增加你的计数器 lastElement === class_names [i] 并将最后一个类名的结果附加到结果字符串,否则将计数器设置为1。
  3. 可能性B: 直接将你的数组存储为[“Wizard”,3,“Sorcerer”,2,...] - 这是可能的,因为JS不需要数组在每个位置包含相同类型的元素。

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