我应该如何为一堆对象生成唯一的 ID?

发布于 2024-11-01 16:32:13 字数 816 浏览 3 评论 0原文

我有一个由大量 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...
};

Symbol 对象的第二个参数是将在 HTML 中使用的 ID。由于 HTML 规范不允许重复的 ID,因此我想为每个 Symbol 分配一个唯一的 ID,并且仍然能够知道该 ID 对应于一个 Symbol。因此,我喜欢使用 symbol_ 前缀,但不喜欢通过 symbol_500 手动输入 symbol_0 的想法。

我应该如何生成唯一 ID?当我声明上述数组时,我可以自动化此过程并生成唯一的 ID 吗?

更新
在客户端进行此操作实际上是一个好主意吗?

I have an array consisting of A LOT of Symbol objects:

var symbols = {
    alpha : new Symbol('alpha', 'symbol_0', 'α', 'GreekSymbol'),
    beta : new Symbol('beta', 'symbol_1', 'β', 'GreekSymbol'),
    gamma : new Symbol('gamma', 'symbol_2', 'γ', 'GreekSymbol'),
    delta : new Symbol('delta', 'symbol_3', 'δ', 'GreekSymbol'),

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

The second parameter for the Symbol object is an ID that will be used in HTML. Since the HTML specs don't allow duplicate IDs, I want to assign each Symbol a unique ID and still be able to know that this ID corresponds to a Symbol. So I like the idea of having the symbol_ prefix but I don't like the idea of manually typing out symbol_0 through symbol_500.

How should I generate unique IDs? Can I automate this process and generate a unique ID when I'm declaring the above array?

UPDATE
Is it actually a good idea to do this client-side?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

眼中杀气 2024-11-08 16:32:13

创建一个递增计数器的函数:

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(), 'α,', '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"

Make a function that increments a counter:

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

var id = makeCounter();

Now each call to id will return a unique value:

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

Use it like this:

new Symbol('alpha', 'symbol_' + id(), 'α,', 'GreekSymbol')

A more fully-featured version would allow you to specify the prefix and an optional start value:

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

Output:

"symbol_12"
网名女生简单气质 2024-11-08 16:32:13

一个跟踪调用次数的简单对象应该可以工作。

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());
}

A simple object that keeps track of the number of calls should work.

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());
}
抚你发端 2024-11-08 16:32:13

如果您只有 500 个左右可供选择,您可以将符号的内容与 JS MD5 实现一起哈希,甚至只使用 JS UUID 生成器,如下所示: com/archives/uuid-generator-in-javascript" rel="nofollow">http://ajaxian.com/archives/uuid-generator-in-javascript

如果此数据在会话之间持久存在并存储在服务器端,你最好在服务器上完成这部分。

If you only have 500 or so to choose from, you could just hash the contents of the symbol together with a JS MD5 implementation, or even just use a JS UUID generator like this one: http://ajaxian.com/archives/uuid-generator-in-javascript

If this data is persistent across sessions and stored serverside, you'd be better off doing this part on the server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文