我无法计算对象的长度

时间:2013-08-07 01:40:01

标签: javascript ajax json

在ajax调用中,我检索一个JSON对象,并通过lenght属性计算结果数。但在另一个代码中,使用相同类型的调用和对服务器端脚本的少许修改,长度属性总是找不到我的定义。为什么? 请注意,在开发人员控制台中,msg被视为一个对象(我叮叮,由ajax自动从JSON转换),而不是这样的数组。

$.ajax({
  url : 'richiediListaVideo.php',
  type : 'POST',
  data :  data,
  dataType : 'json',
  success : function (msg) 
            {
              alert(msg['videos'].length)


            },

“未定义”长度的对象类似于

-video
--title
--duration
---tags
---8  "funny"
---1352  "animals"
---13    "Tv"

我的目标是检索标签长度,我写了 msg ['video'] ['tags']。length

这是“msg”的字符串版本

{ “视频”:{ “持续时间”: “5点51”, “视图”: “2650”, “VIDEO_ID”: “512498”, “等级”: “5.00”, “评分”: “5” ,“title”:“Lovely dog”,“publish_date”:“2013-08-05 16:50:08”,“tags”:{“8”:“funny”,“54”:“lol”,“75 “:” 动物”, “89”: “花园”}}}

澄清: 无论如何我知道如何计算标签的数量,但关键是我真的想知道为什么会发生这个


无论如何,我知道如何计算标签的数量

var length=0; 
for(var elemy in res['video']['tags']) length++

但关键是我真的想知道为什么会发生这个

2 个答案:

答案 0 :(得分:1)

这是你的结果:

{"tags":{"8":"funny", "54":"lol","75":"Animals","89":"Garden"}}

这就是为什么你将无法使用.length 如果您有类似 LOOK AT THE DEMO

的内容
var res = 
{ "tags": [
     {"8":"funny"}, 
     {"54":"lol"},
     {"75":"Animals"},
     {"89":"Garden"}
]}

然后.length可以使用res['tags'].length

答案 1 :(得分:0)

  

无论如何,我知道如何计算标签的数量

var length=0; 
for(var elemy in res['video']['tags']) length++
     

但关键是我真的想知道为什么会发生这个

发生这种情况的原因是因为res['video']['tags']是使用大括号{...}定义的对象,因此它不具有长度属性,因为它不是正确的数组。正确的数组(定义它们的一种方法是使用方括号[])确实有一个长度属性。

注意:命名属性(即,未按整数索引)不计入数组长度的一部分,但也可以添加到数组中。反之亦然 - 编号属性可以添加到对象中。