Как узнать на javascript размер массива

21.06.2017 at 12:17


Для вычисления на javascript размера массива объектов используется свойство массива length.

var arr = ["first", "second"];
console.log(arr.length); // 2

Массивы в javascript могут иметь пропуски в индексах. Например

var arr = [];
arr[0] = "first";
arr[4] = "second";

Свойство length возвращает максимальный индекс массива + 1. Т.е. в приведенном примере length = 5.

Вычисление на javascript количества элементов в массиве

Если нужно посчитать количество реально существующих элементов массива, нужно воспользоваться следующей функцией:

Array.prototype.count = function(){
    var result = 0;
    for(var i = 0; i < this.length; i++)
        if (this[i] != undefined)
          result++;
    return result;
}

Пример использования

var arr = [];
arr[0] = "first";
arr[4] = "second";
console.log(arr.count()); //2

Так же в свойство length можно присваивать значение. Это позволяет уменьшить длину существующего массива.

var arr = ["first", "second", "third"];
arr.length = 2;
console.log(arr); // ["first", "second"]

Вычисление на javascript размера массива в байтах

Массивы являются обычными объектами, так что вычисление размера массива в байтах ничем не отличается от вычисления размера любого другого объекта. К сожалению, javascript не предоставляет API для вычисления размера, так что придется считать самостоятельно. Делается это следующим образом: обходим все свойства объекта, если свойство примитивного типа — добавляем к общему результату размер экземпляра этого типа, если в свойстве лежит объект — рекурсивно считаем его размер.

function sizeOf(obj) {
    var bytes = 0;
    if(obj !== null && obj !== undefined) {
        switch(typeof obj) {
            case 'number':
                bytes += 8;
                break;
            case 'string':
                bytes += obj.length * 2;
                break;
            case 'boolean':
                bytes += 4;
                break;
            case 'object':
                for(var key in obj) {
                    bytes += sizeOf(obj[key]);
                }
                break;
        }
    }
    return bytes;
};

Метод не точный и имеющий множество проблем — например есть вероятность уйти в бесконечный цикл.