创建具有唯一ID的对象

时间:2010-10-09 01:02:21

标签: javascript jquery json

我要做的是创建一个具有唯一ID的对象。为了更好地解释这里的一个例子:

var obj = new Object({
    'a': {
        'someVariable': 'heh',
        'someOtherVariable': 'Stuff'
    },
    'c': {
        'someVariable': 'heh',
        'someOtherVariable': 'Stuff'
    }
});

事实是,对象将被广泛使用/传递,添加和删除项目,但每个项目的“标识符”必须是唯一的...对象可以在一个点保持0个项目,或在另一个点保持700个项目。我觉得最简单的方法是将一个数字作为每个对象的标识符(而不是ac)并枚举Object.keys(obj),找到最高的数字。可悲的是,似乎你不能使用数字,因为当我尝试访问obj.0时,我收到错误。

理想情况下,我希望ID是:

  • 一个数字最容易使用,但如果不可能则不是100%必需的。
  • 删除对象后,它所保存的信息将被插入到数据库中以进行跟踪,因此,即使该ID不再存在于对象中,对象ID仍然是唯一的,这一点非常重要。这就是为什么我认为数字最好,因为你可以为每个项目添加+1。

任何人都知道这样做的方法吗?

编辑以进行详细说明

我正在做的项目基本上是各种工作流程协调员。服务器端将从各种源创建对象,包括客户端输入,并创建对象。该对象被发送到呈现信息的客户端。一旦客户端完成,任务就完成了,因此下次服务器更新任务列表时不需要显示任务(通过发送对象)。然后,该对象将从Object中完全删除,并将信息发送到数据库以进行跟踪。

3 个答案:

答案 0 :(得分:3)

obj.0是语法错误,因为标识符不能以数字开头,但您可以执行obj[0](执行相同的操作):

 var obj = {};
 obj[0] = 'test';
 alert(obj[0]);

答案 1 :(得分:2)

如果id只需要在给定页面的DOM中是唯一的,那么您可以使用一个不断增加的计数器。

但是,您似乎需要将此ID全局唯一,跨页面重新加载以及同时访问多个浏览器。在这种情况下,您需要生成id服务器端或use a UUID

或许我误解了一些事情,你可以使用一个数组?如果要删除它们,请推入数组以添加新对象,并将它们置零(不要移动元素)。

答案 2 :(得分:2)

您可以使用数组:

var obj = [];
obj.push( {'someVariable': 'heh','someOtherVariable': 'Stuff'});
obj.push( {'someVariable': 'heh2','someOtherVariable': 'Stuff2'});

// now obj.length == 2;
// access heh w/ obj[0]["someVariable"] or obj[0].someVariable 

或者您可以使用编号的属性名称和length属性来跟踪“类似数组”对象的数量:

var i = 0, obj ={}; 
obj.length = 0;

obj[i++] = {'someVariable': 'heh','someOtherVariable': 'Stuff'};
obj.length = i; 

obj[i++] = {'someVariable': 'heh2','someOtherVariable': 'Stuff2'};
obj.length = i; 

// now obj.length == 2
// access heh w/ obj[0]["someVariable"] or obj[0].someVariable