2009-09-17 3 views
1

У меня возникли проблемы с подсчетом количества объектов в этом массиве на стороне сервера javascript.Javascript Counting Array of Objects

Ниже представлен объект JSON, который был проанализирован с использованием массива, который я пытаюсь подсчитать.

ПРИМЕЧАНИЕ. Объект находится в форме объекта, а не в форме строки JSON.

JSON объекта:

[{"dataSymbol":"21135103","isHoliday":false,"isIPO":false,"lastTradeTime":40073.49652777778,"strikePrice":"33.00","last":"1.30","change":"0.20","changePct":"18.1818","lastRaw":1.3,"ask":"1.40","bid":"1.30","lastTime":40073.49652777778,"tick":0,"openInterest":"13.6K","volume":"80311","expDate":40194,"coName":"AJR Jan0 33.0 C"}, 
{"dataSymbol":"21339645","isHoliday":false,"isIPO":false,"lastTradeTime":40073.50479166866,"strikePrice":"6.00","last":"2.11","change":"0.01","changePct":"0.4762","lastRaw":2.11,"ask":"2.15","bid":"2.10","lastTime":40073.50479166866,"tick":0,"openInterest":"105.00","volume":"62313","expDate":40285,"coName":"EK Apr0 6.0 C"}, 
{"dataSymbol":"13511861","isHoliday":false,"isIPO":false,"lastTradeTime":40073.489583333336,"strikePrice":"113.00","last":"1.41","change":"-6.34","changePct":"-81.8065","lastRaw":1.41,"ask":"7.60","bid":"7.45","lastTime":40073.489583333336,"tick":0,"openInterest":"805.00","volume":"62975","expDate":40138,"coName":"SPY Nov8 113.0 P"}, 
{"dataSymbol":"20718334","isHoliday":false,"isIPO":false,"lastTradeTime":40073.49375,"strikePrice":"40.00","last":"1.42","change":"-0.05","changePct":"-3.4014","lastRaw":1.42,"ask":"1.46","bid":"1.44","lastTime":40073.49375,"tick":0,"openInterest":"116.1K","volume":"60470","expDate":40194,"coName":"QQQQ Jan0 40.0 P"}, 
{"dataSymbol":"20348966","isHoliday":false,"isIPO":false,"lastTradeTime":40073.47708333333,"strikePrice":"41.00","last":"2.39","change":"-0.06","changePct":"-2.449","lastRaw":2.39,"ask":"2.45","bid":"2.42","lastTime":40073.47708333333,"tick":-1,"openInterest":"4.6K","volume":"60320","expDate":40257,"coName":"QQQQ Mar0 41.0 P"}] 

Я обычно использую myObject.length считать этот тип массива, но это не работает.

Response.Write(optionsQuotes.length); 

Приведенный выше код возвращает результат 21339646 как кол, когда фактический счетчик массива 5.

Я не хотел бы иметь в цикле через массив для подсчета, потому что I прокручиваем его позже, чтобы рисовать таблицу, и мне нужно знать последнюю итерацию до начала розыгрыша таблицы.

Любые идеи?

РЕДАКТИРОВАТЬ:

//here is where I am gettnig the array of objects... 
var myObj = common.getMyObj("param1", "param2"); 

я сериализовать объект с целью показать содержимое массива.

myObj.constructor - это массив.

Это на стороне сервера также BTW.

+0

серверный javascript? – idrumgood

+1

Привет, просто подсказка: вы видели, что у вас есть dataSymbol со значением 21339645 (значение возвращается длиной минус один)? ;) – ATorras

+0

Да. Это также на стороне сервера. Хороший вопрос о значении dataSymbol. –

ответ

2

ECMAScript не обрабатывает длину «ассоциативных» массивов, таких как PHP, - либо использует реальный список, который имеет свойство .length, задает свойство .length вручную в JSON при заполнении свойств объекта, либо сделайте цикл for..in и убедитесь, что используете .hasOwnProperty и добавьте некоторый счетчик.

+0

не имеет значения, так как Шейн хочет определить длину охватывающего массива – Christoph

+0

Я зациклился на массиве и повторил свой счетчик, который сработал. –

+0

Что вы используете для его оценки? –

2

Mhh ... может быть, это не объект JSON, но строка и длины, возвращаются длина строки, а не из массива JSon

С прототипом вам нужно сделать что-то вроде

var data = '{ "name": "Violet", "occupation": "character" }'.evalJSON(); 
data.length 

, но это, очевидно, зависит от используемой структуры.

+0

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

0

Исправлена ​​ошибка должна быть где-то еще, как следующее

<script> 
var foo = eval('[{"dataSymbol":"21135103","isHoliday":false,"isIPO":false,"lastTradeTime":40073.49652777778,"strikePrice":"33.00","last":"1.30","change":"0.20","changePct":"18.1818","lastRaw":1.3,"ask":"1.40","bid":"1.30","lastTime":40073.49652777778,"tick":0,"openInterest":"13.6K","volume":"80311","expDate":40194,"coName":"AJR Jan0 33.0 C"},{"dataSymbol":"21339645","isHoliday":false,"isIPO":false,"lastTradeTime":40073.50479166866,"strikePrice":"6.00","last":"2.11","change":"0.01","changePct":"0.4762","lastRaw":2.11,"ask":"2.15","bid":"2.10","lastTime":40073.50479166866,"tick":0,"openInterest":"105.00","volume":"62313","expDate":40285,"coName":"EK Apr0 6.0 C"},{"dataSymbol":"13511861","isHoliday":false,"isIPO":false,"lastTradeTime":40073.489583333336,"strikePrice":"113.00","last":"1.41","change":"-6.34","changePct":"-81.8065","lastRaw":1.41,"ask":"7.60","bid":"7.45","lastTime":40073.489583333336,"tick":0,"openInterest":"805.00","volume":"62975","expDate":40138,"coName":"SPY Nov8 113.0 P"},{"dataSymbol":"20718334","isHoliday":false,"isIPO":false,"lastTradeTime":40073.49375,"strikePrice":"40.00","last":"1.42","change":"-0.05","changePct":"-3.4014","lastRaw":1.42,"ask":"1.46","bid":"1.44","lastTime":40073.49375,"tick":0,"openInterest":"116.1K","volume":"60470","expDate":40194,"coName":"QQQQ Jan0 40.0 P"},{"dataSymbol":"20348966","isHoliday":false,"isIPO":false,"lastTradeTime":40073.47708333333,"strikePrice":"41.00","last":"2.39","change":"-0.06","changePct":"-2.449","lastRaw":2.39,"ask":"2.45","bid":"2.42","lastTime":40073.47708333333,"tick":-1,"openInterest":"4.6K","volume":"60320","expDate":40257,"coName":"QQQQ Mar0 41.0 P"}]'); 
document.writeln(foo.length); 
</script> 

дает правильное значение.

0

Думаю, вам нужно eval. Может ли 21339645 быть числом символов?