【问题标题】:jQuery: $.each() recursion empties the objectjQuery:$.each() 递归清空对象
【发布时间】:2016-05-12 14:11:23
【问题描述】:

我有一个包含 key:value 对的 json 对象以及格式相同的对象 key:value

我正在尝试像这样在同一个循环中输出keyvalue

 populateUpdateForm: function(data) {

    // console.log(typeof(data));
    // console.log(data);

    $.each(data, function(i, v){

        if ( typeof(v) == 'object' ) {
            populateUpdateForm(v);
            // return false;
        }

        console.log(i, v);

    });

}

只要当前的v 是一个字符串,它就会正确输出它,但是只要我碰到一个对象并再次开始循环,console.log(data) 就是empty,即使typeof() 显示一个对象。

有什么办法可以解决这个问题?

谢谢

编辑无论是否中断循环都会导致相同的错误,jquery.min.js 文件中的Uncaught TypeError: Cannot read property 'length' of null

EDIT2 这里https://jsfiddle.net/7rLesm4y/ 是一个jsfiddle,它是我的代码的复制/粘贴。我使用的是相同的 jQuery 版本,但在 localhost 上出现错误,而在 jsfiddle 上它按我的预期工作。

【问题讨论】:

  • 它应该是数组而不是对象再次迭代。
  • @Braj $.each 也适用于对象。
  • @Alnitak 感谢您的纠正
  • 您的 code (大部分)没问题,问题出在 data 上。你需要防止它递归if (v === null)
  • 我会做if (v !== null && typeof v === 'object') { recurse ... }

标签: javascript jquery loops recursion


【解决方案1】:

问题在于null 值和$.each 循环。虽然它似乎在 jQuery v2.2.0 中工作,但它在旧版本上抛出错误,TypeError: obj is null 在 FF 上和 Cannot read property 'length' of null 在 Chrome 上。

【讨论】:

  • 确实,正如 Alnitak 也提到的,我还需要检查对象是否为空。现在它工作正常。谢谢
猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 2014-05-12
  • 2011-01-13
  • 2015-09-21
  • 2011-09-06
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
相关资源
最近更新 更多