30

Длина объекта в JavaScript

18

У меня есть объект на JavaScript. Существует ли встроенный способ или общепринятая практика для определения длины этого объекта?

Вот мой код:

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

Как мне получить количество свойств в этом объекте?

4 ответ(ов)

0

Чтобы получить length объекта, просто используйте следующий код:

Object.keys(myObject).length

Этот метод возвращает количество собственных перечисляемых свойств объекта myObject.

0

Я не эксперт в JavaScript, но, похоже, вам нужно будет пройтись по элементам и посчитать их, так как у объекта нет метода длины. Вы можете сделать это следующим образом:

var element_count = 0;
for (e in myArray) {  
    if (myArray.hasOwnProperty(e)) element_count++; 
}

Что касается вашего комментария, @palmsey: справедливости ради, в документации JavaScript действительно упоминается, что использование переменных типа Object в таком контексте называется "ассоциативными массивами".

0

Этот метод получает все имена свойств вашего объекта в массиве, поэтому вы можете получить длину этого массива, которая равна количеству ключей вашего объекта.

Object.getOwnPropertyNames({"hi":"Hi","msg":"Message"}).length; // => 2
0

Чтобы не вмешиваться в прототип или другой код, вы можете создать и расширить свой собственный объект:

function Hash(){
    var length = 0;
    this.add = function(key, val){
        if(this[key] === undefined) {
            length++;
        }
        this[key] = val;
    }; 
    this.length = function(){
        return length;
    };
}

myArray = new Hash();
myArray.add("lastname", "Simpson");
myArray.add("age", 21);
alert(myArray.length()); // выдаст 2

Если вы всегда будете использовать метод add, свойство length будет корректным. Если вас беспокоит, что вы или другие забудут использовать этот метод, вы можете добавить счетчик, который будет использоваться в методе length, как уже предлагали другие.

Конечно, вы всегда можете переопределить методы. Однако даже если вы это сделаете, ваш код, скорее всего, будет заметно давать сбой, что упростит отладку. 😉

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь