【问题标题】:Summarizing a javascript array of strings总结一个 javascript 字符串数组
【发布时间】:2012-06-23 18:56:41
【问题描述】:

我在 javascript 中声明了一个可变长度的字符串数组,其中包含 Dungeons and 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 页面,可以打印为一个角色表......这比手动为每个角色编写一个页面要好得多字符,或手写在原版纸上)。

【问题讨论】:

    标签: javascript html unobtrusive-javascript


    【解决方案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(", ");
    

    【讨论】:

    • 谢谢,这正是我需要的!
    【解决方案2】:

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

    可能性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}, ...]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2020-01-18
      • 2022-07-12
      • 1970-01-01
      • 2019-03-29
      相关资源
      最近更新 更多