【问题标题】:Javascript Counting Array of ObjectsJavascript计数对象数组
【发布时间】:2009-09-17 16:40:18
【问题描述】:

我在服务器端 javascript 中计算此数组中的对象数量时遇到问题。

下面是一个 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);

当数组的实际计数为 5 时,上述代码返回 21339646 作为计数的结果。

我宁愿不必循环遍历数组来计算它,因为我稍后会循环遍历它以绘制表格,并且我需要知道表格绘制开始之前的最后一次迭代。

有什么想法吗?

编辑:

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

为了显示数组的内容,我对对象进行了序列化。

myObj.constructor 是一个数组。

顺便说一句,这也在服务器端。

【问题讨论】:

  • 您好,提示一下:您是否看到您有一个值为 21339645 的 dataSymbol(长度减一返回的值)? ;)
  • 是的。它也在服务器端。关于 dataSymbol 值的要点。
  • 哇。 SO如何显示您的问题真是太棒了!
  • 是的!太棒了。同意
  • @idrumgood javascript 可以在服务器端运行(例如,参见 node.js)

标签: javascript arrays object count


【解决方案1】:

ECMAScript 不像 PHP 那样处理“关联”数组的长度 - 要么使用具有 .length 属性的真实列表,要么在填充对象中的属性时在 JSON 中手动设置 .length 属性,或者执行一个 for..in 循环并确保使用 .hasOwnProperty 并增加一些计数器。

【讨论】:

  • 不相关,因为 Shane 想要确定封闭数组的长度
  • 我遍历了数组并迭代了我的计数器,这很有效。
  • 你用什么来评估它?
  • 在服务器端,这只是一个对象数组。我没有评估它,因为它是一个实际的数组,而不是 JSON 字符串。我最终使用了你的例子,我问了我的老板,他表示你是对的。您不能在 JScript 中的关联数组上使用 .length。谢谢
  • @Shane:您问题中的数组不是关联数组。 javascript 中没有关联数组之类的东西。有数组,也有对象。
【解决方案2】:

嗯...可能不是 JSON 对象而是字符串,返回的长度是字符串的长度,而不是 json 数组的长度

使用原型你需要做类似的事情

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

但这显然取决于您使用的框架。

【讨论】:

  • JSON 字符串只是为了演示我试图计算的对象的内容。它是代码中的实际对象
【解决方案3】:

该错误必须在其他地方,如下所示

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

产生正确的值。

【讨论】:

    【解决方案4】:

    我认为你需要eval 字符串。 21339645可以是字符数吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2016-04-22
      相关资源
      最近更新 更多