我有一个在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页面,可以打印成一个角色表......这比为每个角色手动编写一个页面要好得多字符,或在香草纸上书写。)
答案 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:
可能性B: 直接将你的数组存储为[“Wizard”,3,“Sorcerer”,2,...] - 这是可能的,因为JS不需要数组在每个位置包含相同类型的元素。
可能性C: 使用不同的结构,例如使用对象: var class_names = [{name:“Wizard”,level:3},{name:“Sorcerer”,level:2},...]