0

我正在用 JQuery 解析 Json 文件,我从这里得到了很大的帮助,如何将 .each 循环转换为 for 循环并且循环本身可以工作,我还有其他问题,data.lenght 始终未定义并且代码不会进入循环:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
    <script>

    $.getJSON('db.json', function(data) 
    {


    var items = [];
    var i, val;

    console.log(data); //is full and ok
    console.log(data.length); //problem here
    for (i=0; i< data.length; i++) 
    {
        val = data[i];
        if(typeof val === 'object') 
        {
            //doing some stuff
        } 

    }

    });

    </script>

控制台:

Object { @file_name="materials", materials=[10], simulations=[10], more...}
undefined
4

2 回答 2

2

对象没有length属性(除非你给他们一个)。数组可以,但对象不会。

如果要遍历该对象的属性,可以使用for-in循环或 jQuery 的$.each.

for-in环形:

$.getJSON('db.json', function(data) 
{


var items = [];
var i, val;

for (i in data)
{
    val = data[i];
    if(typeof val === 'object') 
    {
        //doing some stuff
    } 

}

});

更多关于for-in 我的博客。我在上面使用它而不担心继承属性,因为从 JSON 反序列化的对象不能有任何可枚举的继承属性。*

$.each

$.getJSON('db.json', function(data) 
{


var items = [];

$.each(function(i, val) {
    if(typeof val === 'object') 
    {
        //doing some stuff
    } 

});

});

* "...从 JSON 反序列化的对象不能有任何可枚举的继承属性。"

这实际上是错误的,如果有人将可枚举属性添加到Object.prototype. 但是任何在生产代码中这样做的人都应该在公共场合受到口头鞭笞。:-)

于 2013-08-11T13:38:00.620 回答
2

鉴于控制台输出,返回的值似乎不是一个Array(对象),而是一个Object. 对象没有length属性。

于 2013-08-11T13:38:47.457 回答