2012-06-21 25 views
1

的一个JavaScript阵列I具有在包含龙与地下城类名JavaScript中声明的字符串的一个可变长度的数组。这方面的例子是以下:总结串

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页面....这远远超过手工编写一个页面更好每个角色,或在香草纸上书写)。

回答

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(", "); 
+0

谢谢,这正是我所需要的! –

0

我认为有许多办法来解决你的问题......

可能性答:

  1. 如果你不知道的类出现在正确的顺序,尝试首先对Array进行排序,以确保它们被正确分组。
  2. 迭代这个数组和计数的重复,也就是增加你的计数器,如果 是以lastElement === class_names [I] 并追加结果最后类名到结果字符串,并设置计数器回到否则为1。

可能性B: 商店中的阵列直接作为[“向导”,3“巫师”,2,...] - 这是可能的,因为JS不需要阵列包含相同类型的元件在每个位置。

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