6

私はたくさんSymbolオブジェクトからなる配列を持っています:

var symbols = {
    alpha : new Symbol('alpha', 'symbol_0', '&#x03B1', 'GreekSymbol'),
    beta : new Symbol('beta', 'symbol_1', '&#x03B2', 'GreekSymbol'),
    gamma : new Symbol('gamma', 'symbol_2', '&#x03B3', 'GreekSymbol'),
    delta : new Symbol('delta', 'symbol_3', '&#x03B4', 'GreekSymbol'),

    ... about 500 of these different types of symbols...
};

オブジェクトの 2 番目のパラメーターはSymbol、HTML で使用される ID です。HTML 仕様では ID の重複が許可されていないため、それぞれSymbolに一意の ID を割り当て、この ID がSymbol. だから私は接頭辞を持つという考えが好きですが、手動で入力するsymbol_という考えは好きではありません.symbol_0symbol_500

一意の ID を生成するにはどうすればよいですか? 上記の配列を宣言するときに、このプロセスを自動化して一意の ID を生成できますか?

更新
これをクライアント側で行うのは実際には良い考えですか?

4

3 に答える 3

9

カウンターをインクリメントする関数を作成します。

function makeCounter() {
    var i = 0;
    return function() {
        return i++;
    }
}

var id = makeCounter();

これで、を呼び出すたびidに一意の値が返されます。

id(); // 0
id(); // 1
id(); // 2
id(); // 3

次のように使用します。

new Symbol('alpha', 'symbol_' + id(), '&#x03B1,', 'GreekSymbol')

より完全な機能を備えたバージョンでは、プレフィックスとオプションの開始値を指定できます。

function generateId(prefix, start) {
    var i = start || 0;
    return function() {
        return prefix + i++;
    }
}
// start the counter at 12
var id = generateId("symbol_", 12);
id();

出力:

"symbol_12"
于 2011-04-17T01:02:14.060 に答える
1

呼び出しの数を追跡する単純なオブジェクトが機能するはずです。

function IdGenerator(baseName) {
    this.baseName = "" + baseName;
    this.number = 0;
}

IdGenerator.prototype.next = function () {
    return "" + this.baseName + this.number++;
};

var gen = new IdGenerator("symbol_")
for (var i = 0; i < 100; i++) {
    console.log(gen.next());
}
于 2011-04-17T01:04:56.623 に答える
0

500程度しか選択できない場合は、シンボルの内容をJS MD5実装と一緒にハッシュするか、次のようなJSUUIDジェネレーターを使用することもできます。http: //ajaxian.com/archives/uuid -generator-in-javascript

このデータがセッション間で永続的であり、サーバー側に保存されている場合は、サーバー上でこの部分を実行することをお勧めします。

于 2011-04-17T01:01:25.133 に答える