Что-то я узнал только сейчас, так это то, что JavaScript смешно о массивах. Если вы не используете численные индексы, элементы вашего массива фактически станут свойствами основного объекта. Это отстой, но это также имеет смысл.
Это означает, что если у вас есть многомерный массив (который был бы как Array [x] [y] ):
[
a: [a, b, c],
b: [a, b, c],
c: [a, b, c]
]
Который может быть построен так:
var chars = ['a', 'b', 'c'],
arr = [],
x, y;
for(x = 0; x < 3; x++) {
arr[chars[x]] = [];
for(y = 0; y < 3; y++) {
arr[chars[x]][chars[y]] = true;
}
}
Тогда, если вы хотите получить длину первого измерения этого массива, arr.length не собирается работать. Вы получите 0 Отказ Если вы продлите Объект Прототип, вы можете добавить в простой метод подсчета ключа, как так:
Object.prototype.getLength = function() {
var len = 0;
for (var key in this) {
if (this.hasOwnProperty(key)) {
len++;
}
}
return len;
}
Это отлично работает, как вы можете видеть:
> console.log(arr.length, arr.getLength()); 0, 3
Другой, вероятно, безопаснее, способ сделать это, чтобы поставить его в функцию, а не расширять прототип объекта:
var getAssocArrayCount = function(array) {
var len = 0;
for (var key in array) {
if (array.hasOwnProperty(key)) {
len++;
}
}
return len;
}
А потом просто назовите это так:
> console.log(arr.length, getAssocArrayCount(arr)); 0, 3
Оригинал: “https://dev.to/adamkdean/get-length-of-associative-array-in-javascript-23f3”