【问题标题】:Looping through a json array of objects循环遍历对象的 json 数组
【发布时间】:2014-03-10 20:26:46
【问题描述】:

我一直在尝试按照另一个 stackoverflow 问题的示例:

javascript or jquery: Looping a multidimensional object

我将这个问题作为最后的手段发布,因为我已经解决了几个小时的问题!

我有一个返回 json 数组的 ajax 函数。

ajax:

  $.ajax({ url: 'functions.php',
           data: {action: 'getNFCMapping', site: site_id},
           type: 'post',
           dataType: 'json',
           success: function(data) {
            //loop the json to get the
                for (var key in data) {
                      console.log(data[key].nfc_id);
                  }
            } //end success
  });//end ajax

json 数组:

[{"24":{"nfc_id":"1","description":"sdfgdsg"}},{"25":{"nfc_id":"2","description":"dfgdfgdfg"}},{"26":{"nfc_id":"3","description":"fdgdffg"}},{"27":{"nfc_id":"4","description":"dfgdfgdfg"}}]

我最终要做的是在 DOM 中加载一个表单,其中输入字段(预填充)成对的 nfc_id 和描述,因此循环的每次迭代都应该输出这两个值。

目前的问题是我实际上无法访问每次迭代中的值,例如您可以看到我正在尝试记录每次迭代的 nfc_id,但它只是在控制台中显示为对象。

在示例 (javascript or jquery: Looping a multidimensional object) 中,我可以看到我的 json 格式的差异,因为我的数组的每次迭代都有两个右括号,这是问题所在吗?

请帮助这让我发疯..

【问题讨论】:

    标签: javascript jquery json loops


    【解决方案1】:

    你想要两个嵌套的.each() loops

    $.each(data, function(key, value) {
        $.each(value, function(k, v) {
           console.log(v.nfc_id); 
        });
    });
    

    Fiddle

    【讨论】:

    • 优秀,工作。谢谢@scrowler。一旦超过时间限制将接受。
    • 只是想在这里提出一些警告,因为$.each() 随着数组/对象元素数量的增加,处理时间呈现指数差异。使用$.each() 时,一百万次空数组项的迭代时间增加了 1500%。当然,这会因一个 CPU 而异,所以我的旧 AMD 双核可能低于现代 CPU 的平均水平。 My Test
    【解决方案2】:

    你的数据是一个数组,所以你应该使用for (var i = 0; i < data.length; i++) 循环。每个元素都是一个对象,因此您使用var key in obj 表示法:

    for (var i = 0; i < data.length; i++) {
        for (var key in data[i]) {
            console.log(data[i][key].nfc_id);
        }
    }
    

    【讨论】:

      【解决方案3】:

      也许试试.each jQuery 方法? Link

      为了你的成功:

      success: function(data){
          $(data).each(function(index, element){
            //log here
          }
      }
      

      【讨论】:

        【解决方案4】:
        for(var i=0, i<data.length;i++)
        $.each(data[i], function(key, val) {
            console.log(val.nfc_id);
            console.log(val.description);
        });
        

        【讨论】:

          猜你喜欢
          • 2016-07-28
          • 2015-06-27
          • 1970-01-01
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 2019-12-17
          • 2016-09-07
          相关资源
          最近更新 更多