Что-то я узнал только сейчас, так это то, что 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”