1

ダンジョンズアンドドラゴンズのクラス名を含むJavaScriptで宣言された文字列の可変長配列があります。この例を以下に示します。

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. クラスが正しい順序で表示されているかどうかわからない場合は、最初に配列を並べ替えて、クラスが正しくグループ化されていることを確認してください。
  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 に答える