Как получить длину объекта

javascript json object

509243 просмотра

15 ответа

Есть ли встроенная функция, которая может вернуть длину объекта?

Например, у меня есть, a = { 'a':1,'b':2,'c':3 }который должен вернуться 3. Если я использую a.lengthэто возвращает undefined.

Это может быть простая функция цикла, но я хотел бы знать, есть ли встроенная функция?

Есть связанный вопрос ( длина объекта JSON ) - в выбранном ответе пользователь советует преобразовать объект в массив, что не совсем удобно для моей задачи.

Автор: Larry Cinnabar Источник Размещён: 12.11.2019 09:38

Ответы (15)


540 плюса

Решение

Для браузеров, поддерживающих Object.keys (), вы можете просто сделать:

Object.keys(a).length;

В противном случае (в частности, в IE <9), вы можете зациклить объект самостоятельно с помощью for (x in y)цикла:

var count = 0;
var i;

for (i in a) {
    if (a.hasOwnProperty(i)) {
        count++;
    }
}

Он hasOwnPropertyпредназначен для того, чтобы убедиться, что вы считываете только свойства из литерала объекта, а не свойства, которые он «наследует» от своего прототипа.

Автор: David Tang Размещён: 03.04.2011 11:27

69 плюса

Это должно сделать это:

Object.keys(a).length

Однако Object.keysне поддерживается в IE8 и ниже, Opera и FF 3.6 и ниже.

Демонстрация в реальном времени: http://jsfiddle.net/simevidas/nN84h/

Автор: Šime Vidas Размещён: 03.04.2011 11:48

59 плюса

Может быть легко сделано с $.map():

var len = $.map(a, function(n, i) { return i; }).length;
Автор: Fazle Rabbi Размещён: 14.11.2012 09:10

45 плюса

Вы взглянули на underscore.js ( http://underscorejs.org/docs/underscore.html )? Это служебная библиотека с множеством полезных методов. Существует sizeметод коллекции , а также метод toArray, который может дать вам то, что вам нужно.

_.size({one : 1, two : 2, three : 3});
=> 3
Автор: Philip Schweiger Размещён: 03.04.2011 11:39

20 плюса

Суммируя все вместе, вот универсальная функция (включая поддержку ie8):

var objSize = function(obj) {
    var count = 0;
    
    if (typeof obj == "object") {
    
        if (Object.keys) {
            count = Object.keys(obj).length;
        } else if (window._) {
            count = _.keys(obj).length;
        } else if (window.$) {
            count = $.map(obj, function() { return 1; }).length;
        } else {
            for (var key in obj) if (obj.hasOwnProperty(key)) count++;
        }
        
    }
    
    return count;
};

document.write(objSize({ a: 1, b: 2, c: 3 }));
// 3

Автор: tibalt Размещён: 27.06.2014 05:38

10 плюса

В jQuery я сделал это таким образом:

len = function(obj) {
    var L=0;
    $.each(obj, function(i, elem) {
        L++;
    });
    return L;
}
Автор: Larry Cinnabar Размещён: 03.04.2011 11:35

7 плюса

Таким образом, не нужно искать и заменять метод Object.keys, другой подход будет заключаться в следующем коде в начале выполнения скрипта:

if(!Object.keys)
{
  Object.keys = function(obj)
  {
    return $.map(obj, function(v, k)
    {
      return k;
    });
  };
 }
Автор: Robert Brisita Размещён: 10.01.2014 03:20

5 плюса

Вот jQuery-функция ответа Innuendo, готовая к использованию.

$.extend({
    keyCount : function(o) {
        if(typeof o == "object") {
            var i, count = 0;
            for(i in o) {
                if(o.hasOwnProperty(i)) {
                    count++;
                }
            }
            return count;
        } else {
            return false;
        }
    }
});

Можно назвать так:

var cnt = $.keyCount({"foo" : "bar"}); //cnt = 1;
Автор: Andrew Plank Размещён: 09.11.2012 11:29

3 плюса

Еще один ответ:

var j = '[{"uid":"1","name":"Bingo Boy", "profile_img":"funtimes.jpg"},{"uid":"2","name":"Johnny Apples", "profile_img":"badtime.jpg"}]';

obj = Object.keys(j).length;
console.log(obj)

Автор: Mahendra Kulkarni Размещён: 31.05.2016 04:44

2 плюса

Для тех, кто приходит сюда, чтобы найти количество элементов того, что уже является объектом jQuery :
.length - это то, что вы ищете:

Пример:

len = $('#divID').length;
alert(len);
Автор: Jpsy Размещён: 27.04.2015 08:45

1 плюс

Если вы хотите избежать новых зависимостей, вы можете создавать свои собственные смарт-объекты. Конечно, только если вы хотите сделать больше, просто получите его размер.

MyNeatObj = function (obj) {
  var length = null;

  this.size = function () {
    if (length === null) {
      length = 0;
      for (var key in obj) length++;
    }
    return length;
  }
}

var thingy = new MyNeatObj(originalObj);
thingy.size();
Автор: doublejosh Размещён: 02.06.2014 04:26

1 плюс

Также это можно сделать следующим образом:

Object.entries(obj).length

Например:

let obj = { a: 1, b: 2, };
console.log(Object.entries(obj).length); //=> 2
// Object.entries(obj) => [ [ 'a', 1 ], [ 'b', 2 ] ]
Автор: sulthan thoufeeq Размещён: 19.07.2018 06:57

0 плюса

У вас может быть неопределенное свойство в объекте. Если используется метод, Object.keys(data).lengthэти свойства также будут учитываться.

Возможно, вы захотите отфильтровать их.

Object.keys(data).filter((v) => {return data[v] !== undefined}).length
Автор: Yaki Klein Размещён: 15.02.2017 01:53

-1 плюса

Вы можете использовать что-то вроде Lodash lib и _.toLength (объект) должен дать вам длину вашего объекта

Автор: Hamatek Размещён: 26.05.2016 04:26

-1 плюса

Вы можете добавить другое имя: значение пары длины и соответственно увеличить / уменьшить его. Таким образом, когда вам нужно запросить длину, вам не нужно каждый раз перебирать все свойства объектов, и вам не нужно полагаться на определенный браузер или библиотеку. Все зависит от вашей цели, конечно.

Автор: ajq88 Размещён: 27.08.2016 11:14
Вопросы из категории :
32x32