Рубрики
Без рубрики

Получить длину ассоциативного массива в JavaScript

Что-то я узнал только сейчас, так это то, что JavaScript смешно о массивах. Если вы не используете численное … Теги с JavaScript.

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