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

时间:2011-07-11 23:14:41

标签: javascript arrays associative-array numeric

在Javascript中,我有一组对象,用户,这样用户[1] .name会给我这个用​​户的名字。

我想使用该用户的ID作为索引而不是不断增加的计数器。 例如,我可以将第一个用户作为用户[45]发起。

然而,我发现一旦我做了用户[45],javascript会把它变成一个数字数组,这样当我做users.length时,我得到46。

在这种情况下,是否有强迫它将数字视为字符串。 (“”不起作用)?

2 个答案:

答案 0 :(得分:11)

您无法在JavaScript中使用此类函数的数组 - 有关详细信息,请参阅"Javascript Does Not Support Associative Arrays."

请确保将users变量初始化为Object。在此对象中,您可以存储任意非顺序键。

var users = new Object();

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

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

要获取对象中的用户数,这是从this SO answer中窃取的函数:

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 :(得分:2)

汉斯在这里有正确的答案。使用对象上的键,而不是数组。我建议你阅读这两个参考文献:

http://www.quirksmode.org/js/associative.htmlhttp://blog.xkoder.com/2008/07/10/javascript-associative-arrays-demystified/

尝试从数组对象中创建关联数组是非标准的,并且可能导致问题(例如.length将为零)。改为使用对象上的键。