2012-06-22 2 views
-1

Я работаю над функцией, которая принимает объект JSON в качестве параметра. Каждое свойство переданного объекта будет массивом. Мне нужно определить длину каждого из этих массивов.Динамически читаемые значения массива образуют объект JSON

Что я не буду знать заранее: имена свойств или количество свойств.

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

Спасибо заранее, -rs

+0

Возможный дубликат [Как получить свойства объекта в JavaScript/jQuery?] (Http://stackoverflow.com/questions/4079274/how-to-get-an-objects-properties-in-javascript-jquery) –

+0

Вы можете получить длину массива из его свойства 'length'. –

ответ

0

Вы можете перемещаться по объекту, используя for...in петлю для доступа к каждому свойству.

for (var key in myObject) { 
    // Check to make sure the property is not part of the `Object` prototype (eg. toString) 
    if (myObject.hasOwnProperty(key)) { 
    console.log(key, myObject[key].length); 
    } 
} 

В приведенном выше примере, мы итерацию по свойствам объекта myObject и мы выйти из их значений длины (при условии, что они все массивы).

Если на «JSON объект» вы имеете в виду, что это строка JSON, вы можете сначала разобрать MyObject в истинный объект с помощью myObject = JSON.parse(myObject) (который работает в современных браузерах) или myObject = eval("(" + myOjbect + ")"), который считается небезопасной (но работает во всех браузеры). После синтаксического анализа вы можете использовать описанную выше технику для точной длины массива.

Примечание: Так как вы обновили пост, чтобы указать, что объект JSON, вы не может понадобитьсяhasOwnProperty чек, но безопаснее всегда использовать этот тест.

+0

Действие Джейк: Спасибо. Это тот подход, который я использовал, но теперь я вижу, чего не хватает. Я буду использовать ваши имена переменных для иллюстрации: я пытался ссылаться на массивы в цикле for ... in, используя myObject вместо myObject [key]. Поэтому myObject.length просто возвращает длину строки, содержащей имя ключа. Спасибо! – RLS

+0

А ... да, вы предполагали функциональность нового цикла 'for ... of' в ES6 :) https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...of К сожалению, вам придется подождать еще некоторое время, чтобы использовать это. –

+0

Correction ": Я пытался ссылаться на массивы в цикле for ... in, используя ключ вместо myObject [key]. Поэтому key.length просто вернула длину строки, содержащей имя ключа. – RLS

0

Используйте JSON.parse для преобразования данных в формате JSON для JS объектов, а затем вы можете использовать свойство массива длиной и т.д..

var myObject = JSON.parse(myJSONtext, reviver); 

JSON Ссылка: http://www.json.org/js.html

+0

Спасибо, но я не спрашивал, как разбираться. – RLS

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