我要做的是创建一个具有唯一ID的对象。为了更好地解释这里的一个例子:
var obj = new Object({
'a': {
'someVariable': 'heh',
'someOtherVariable': 'Stuff'
},
'c': {
'someVariable': 'heh',
'someOtherVariable': 'Stuff'
}
});
事实是,对象将被广泛使用/传递,添加和删除项目,但每个项目的“标识符”必须是唯一的...对象可以在一个点保持0个项目,或在另一个点保持700个项目。我觉得最简单的方法是将一个数字作为每个对象的标识符(而不是a
或c
)并枚举Object.keys(obj)
,找到最高的数字。可悲的是,似乎你不能使用数字,因为当我尝试访问obj.0
时,我收到错误。
理想情况下,我希望ID是:
任何人都知道这样做的方法吗?
我正在做的项目基本上是各种工作流程协调员。服务器端将从各种源创建对象,包括客户端输入,并创建对象。该对象被发送到呈现信息的客户端。一旦客户端完成,任务就完成了,因此下次服务器更新任务列表时不需要显示任务(通过发送对象)。然后,该对象将从Object中完全删除,并将信息发送到数据库以进行跟踪。
答案 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