2013-10-01 5 views
3

Мой вопрос короткий и краткий.Свойства счета объекта JavaScript

мне нужно подсчитать атрибуты объекта Json, например

obj={ 
     name:'Jhon', 
     age:25 
} 

Это должно вернуть 2, один для «имя» и Отер для «возраста». Прошу использовать.

obj.count(); 
obj.length(); 

Но ничего ...

В всех решениях, которые я нашел в интернете было для подсчета элементов массива.

Спасибо всем!

+2

Это не JSON. Это JavaScript. (В частности, это инициализатор объекта JavaScript.) [JSON] (http://json.org) - это некод, текстовый формат данных. И в JavaScript они называются «свойствами», а не «атрибутами» (а не критикой, «атрибуты» - общий термин, просто давая вам знать, что такое точный термин). –

ответ

11

Попробуйте Object.keys, Там нет встроенного в length свойства или метода на объекте Javascript.

var propCount = Object.keys(obj).length; 

Обратите внимание, что есть Shim вам нужно добавить в исходном коде для дополнительной поддержки для некоторых старых браузеров (например: IE < 9). Читайте по ссылке документации от MDN

+0

так просто, спасибо! – Federico

+2

Я бы посоветовал не трогать Object.prototype, вы будете влиять на * все * еще с непредсказуемыми результатами. – LexLythius

+0

@LexLythius да, вы правы, не рекомендуется вообще расширять встроенные проты – PSL

3

Попробуйте так:

Object.keys(obj).length 
+0

Эта работа, танки! – Federico

+0

+1 для вас, возможно, через несколько секунд возможно .. – PSL

+0

+1 для вас тоже :) Всего через 2 секунды: D –

2

Просто, чтобы добавить к Object.keys(obj).length решения, вот polyfill для браузеров, которые не поддерживают Object.keys.

Object.keys = Object.keys || function(o,k,r){ 
    r=[]; 
    for(k in o){ 
     r.hasOwnProperty.call(o,k) && r.push(k); 
    } 
    return r; 
} 
+0

Вам нужно будет поставить 'return r' вне цикла for. – PSL

+0

Здесь вы идете +1 ... :) – PSL

Смежные вопросы