JavaScript с использованием числового массива в качестве ассоциированного массива - PullRequest
3 голосов
/ 12 июля 2011

В Javascript у меня есть массив объектов-пользователей, так что пользователи [1] .name дадут мне имя этого пользователя.

Я хочу использовать идентификатор этого пользователя в качестве индекса вместо постоянно увеличивающегося счетчика. Например, я могу инициировать первого пользователя как пользователей [45].

Тем не менее, я обнаружил, что когда я делаю пользователей [45], javascript превращает его в числовой массив, так что когда я делаю users.length, я получаю 46.

В любом случае можно ли заставить его обрабатывать число как строку? ("" не работает)?

Ответы [ 2 ]

11 голосов
/ 12 июля 2011

Вы не можете использовать массивы для такого рода функций в 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));
2 голосов
/ 12 июля 2011

Ганс имеет правильный ответ здесь. Используйте ключи на объекте, а не на массиве. Я бы посоветовал вам прочитать эти две ссылки:

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

Попытка сделать ассоциативный массив из объекта массива является нестандартной и может вызвать проблемы (например, .length будет нулевым). Вместо этого используйте ключи на объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...