【问题标题】:javascript using numeric array as associate arrayjavascript使用数值数组作为关联数组
【发布时间】:2011-07-11 23:14:41
【问题描述】:

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

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

但是,我发现一旦我做 users[45],javascript 会将它变成一个数字数组,这样当我做 users.length 时,我得到 46。

在这种情况下,无论如何强制它将数字视为字符串。 (“ ”不起作用)?

【问题讨论】:

  • 您应该将对象用于关联数组,但它们没有length 属性。您必须保留一个计数器,您添加了多少用户(如果需要)。问题是,你想对这个数据结构执行什么操作?顺便提一句。对于数组,length 将始终是最高索引 + 1。它实际上并没有将数组扩展到这个大小。
  • 不要使用数组作为哈希映射。当需要哈希映射时使用对象。 JS 中没有 PHP 中的关联数组。
  • 为什么不是哈希映射的数组。您的意思是应该使用对象的对象吗?

标签: javascript arrays associative-array numeric


【解决方案1】:

您不能在 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));

【讨论】:

  • 我相信他有一个对象数组,而不是一个对象对象?除非您建议在数组文字上使用对象文字 - 在这种情况下,您可以更清楚地说明这一点。我猜只是挑剔。
  • @Shaz:JS 中没有关联数组,它们总是对象。
  • @Shaz - 你没抓住重点,他不能以他想要的方式使用对象数组,他需要使用一个对象
  • 如果你添加了一种方法来克服这个问题,(就像@Hans 所做的那样)如果这是一个答案,我会 +1 你。
  • 是的。我想到了一个对象数组。但是对象的对象也可能起作用....我只想要一个“组”对象,我需要能够知道其中有多少
【解决方案2】:

汉斯在这里有正确的答案。在对象上使用键,而不是数组。我建议您阅读以下两篇参考资料:

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

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

【讨论】:

  • 谢谢。我喜欢引用文章的回复。他们总是给我更多的洞察力和理解力。你会不会碰巧有其他文章讨论如何在 html 中为分层数据组织数组,就像我这里的数组数组一样
猜你喜欢
  • 1970-01-01
  • 2012-05-08
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多