Не может получить правильную длину массива

Код ниже возвращает длину массива

var test=[];
test["abc"]=1;
test["abcd"]=11;
console.log(test.length);

Я ожидал, что он выйдет 2, но отобразит 0

Ваш комментарий приветствуется

4 ответа

Вы должны подсчитать количество ключей с помощью Object.keys:

console.log(Object.keys(test).length); // 2

В идеале не используйте массив, а просто объект JavaScript (также называемый хэш):

var test = {};
test.abc = 1;
test.abcd = 11;


На самом деле вы не добавляете никаких элементов в массив, это создает свойства объекта массива.

Вы можете сказать, что я говорю правду, набрав это:

console.log(test.abc);
console.log(test.abcd);

length была бы увеличена, вероятно, если бы вы добавили элементы с помощью push() или установили их с помощью числового индекса, например:

test[0] = 1;
test[1] = 2;


Ваша проблема связана с неправильным пониманием того, что происходит в массиве Javascript.

В Javascript array задается как определенный тип объекта, состоящий только из числовых клавиш.

.length является специальным свойством объекта массива, который привязан к значению наибольшего числового ключа в массиве.

Используя такие клавиши, как "abc", вы фактически просто устанавливаете произвольные свойства объекта; свойство length будет полностью не затронуто этим.

У вас есть два варианта:

  1. Используйте цифровые клавиши для вашего массива.

  2. Если вам нужно использовать именованные ключи, вам придется признать, что свойство length и другие функции, относящиеся к массиву, недоступны. Таким образом, вы можете использовать обычный объект, а не массив.

    По-прежнему можно считать элементы в объекте, но это не так просто, как просто использовать свойство length.


Если вы хотите добавить элементы в массив, используйте

array[0] = 1; array[1] = 11;

В противном случае вы добавляете свойства к массиву

licensed under cc by-sa 3.0 with attribution.