JavaScript使用数值数组作为关联数组

3
在Javascript中,我有一个对象数组users,例如users[1].name可以给我这个用户的名字。
我想使用该用户的ID作为索引,而不是递增的计数器。例如,我可以将第一个用户初始化为users[45]。
但是,我发现一旦我使用users[45],Javascript会将其转换为数字数组,因此当我执行users.length时,我得到46。
在这种情况下,有没有办法强制它将数字视为字符串?(“ ”无效)

你应该使用对象来创建关联数组,但是它们没有 length 属性。如果需要,你必须保持一个计数器来记录添加的用户数量。问题是,你想对这个数据结构执行哪些操作?另外,对于一个数组,length 总是最高索引 + 1。它实际上并不会将数组扩展到这个大小。 - Felix Kling
2
不要使用数组作为哈希映射。在需要哈希映射时,应该使用对象。在JS中没有像PHP中的关联数组。 - Ruan Mendes
为什么不使用数组来实现哈希映射?你是指应该使用对象的对象吗? - William Sham
2个回答

11

在 JavaScript 中,你不能使用数组来实现这种类型的功能 —— 欲了解更多信息,请参见"JavaScript 不支持关联数组"

确保将变量 users 初始化为一个Object,在这个对象中,你可以存储任意的、非连续的键。

var users = new Object();

// or, more conveniently:
var users = {};

users[45] = { name: 'John Doe' };

以下是一个从这个SO答案中盗来的函数,可以用于获取对象中用户数量:

Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

var users = {};
// add users..

alert(Object.size(users));

1
我相信他有一个对象数组,而不是一个对象的数组?除非你建议使用对象字面量而不是数组字面量 - 在这种情况下,你可以更清楚地表达。我只是有点挑剔。 - Shaz
1
@Shaz:JS 中没有关联数组,它们总是对象。 - Dr.Molle
@Shaz - 你没有理解重点,他不能以他想要的方式使用对象数组,他需要使用一个对象。 - tomfumb
如果你能够解决这个问题(像@Hans那样),如果它是一个答案的话,我会给你点赞。 - Shaz
我添加了一个示例,用于计算users对象中包含的对象数量。 - Jon Gauthier
显示剩余4条评论

2

1
谢谢。我喜欢那些参考文章的回复,它们总是给我更多的洞见和理解。你是否有其他关于如何在HTML中组织层次数据的数组的文章,类似于这里的数组? - William Sham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接