1 votes

Javascript compte un tableau d'objets

J'ai des difficultés à compter le nombre d'objets dans ce tableau en javascript côté serveur.

Voici un objet JSON qui a été analysé à l'aide du tableau que j'essaie de compter.

NOTE : L'objet est sous forme d'objet, et non de chaîne JSON.

Objet 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"}]

J'utilise habituellement myObject.length pour compter ce type de tableau, mais cela ne fonctionne pas.

Response.Write(optionsQuotes.length);

Le code ci-dessus renvoie un résultat de 21339646 comme compte, alors que le compte réel du tableau est de 5.

Je préférerais ne pas avoir à parcourir le tableau en boucle pour le compter, car je le parcourrai plus tard pour dessiner un tableau, et j'ai besoin de connaître la dernière itération avant de commencer à dessiner le tableau.

Des idées ?

EDIT :

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

J'ai sérialisé l'objet dans le but de montrer le contenu du tableau.

myObj.constructor est un tableau.

C'est également le cas du côté serveur.

2voto

meder Points 81864

ECMAScript ne gère pas la longueur des tableaux "assocatifs" comme le fait PHP - il faut soit utiliser une vraie liste qui a une propriété .length, soit définir manuellement la propriété .length dans le JSON au fur et à mesure que vous remplissez les propriétés de l'objet, soit faire une boucle for..in et s'assurer d'utiliser .hasOwnProperty et d'incrémenter un compteur.

2voto

4NDR01D3 Points 75

Mhh... peut-être que ce n'est pas un objet JSON mais une chaîne de caractères et que la longueur qui est retournée est la longueur de la chaîne de caractères et non du tableau json.

Avec le prototype, vous devez faire quelque chose comme

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

mais cela dépend évidemment de la structure que vous utilisez.

0voto

Christoph Points 64389

Le bogue doit se trouver ailleurs, comme dans le cas suivant

<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>

donne la valeur correcte.

0voto

Josh Stodola Points 42410

Je pense que vous devez eval la chaîne de caractères. 21339645 pourrait-il être le nombre de caractères ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X