【问题标题】:Issue Looping through an array of Objects dynamically using Javascript使用Javascript动态循环遍历对象数组
【发布时间】:2019-06-01 23:19:50
【问题描述】:

在 Laravel 应用程序上工作,从前端获取数据并填充 使用Javascript在前端动态。在前端,我划分为 2 个主要列(左列和右列)。左侧栏有一个链接,当将鼠标悬停在或单击右侧时会显示相应的政策。

问题是我发现很难迭代包含 Javascript 对象集合的策略数组并在表中动态显示它们。

当我使用下面的方法时,我在表体中得到 [object Object]

来自后端的 asm 变量

"agency_sales": [
    {
        "id": "111",
        "policies": [
            {
                "name": "JOHN DOE 1",
                "sum_covered": "555000",
                "date": "2018-05-16 12:02:32"
            },
            {
                "name": "JOHN DOE 2",
                "sum_covered": "404000",
                "date": "2018-02-20 17:33:25"
            },
        ]
    }
    {
        "id": "222",
        "policies": [
            {
                "name": "JOHN DOE 1",
                "sum_covered": "555000",
                "date": "2018-05-16 12:02:32"
            },
            {
                "name": "JOHN DOE 2",
                "sum_covered": "404000",
                "date": "2018-02-20 17:33:25"
            },
        ]
    }
]

左列包含带有动态 ID 的链接

<div class="col-md-4">
@foreach($asm as $a)
     <a href="#demo{{$i}}" class="list-group-item list-group-item-primary dropdown-toggle" data-toggle="collapse" data-parent="#MainMenu" style="color: #868ba1;" id="{{ $a['id'] }}"> Agency Sales Managers ID : {{ $a['id'] }} </a>
@endforeach
</div>

右列包含我要动态填充的表格

<div class="col-md-8">
 <table class="table table-hover mg-b-0 tx-11" id="summary-table">
    <thead>
      <tr>
        <th>NAME</th>
        <th>SUM</th>
        <th>DATE</th>
      </tr>
    </thead>
      <tbody>
        <tr> <!-- Add policies dynamically via JS under respective thead columns--></tr> 
      </tbody>
</table>
</div>

JavaScript 代码

$( document ).ready(function() {
    var asmData = {!! json_encode($asm) !!};
});

$(document).on("mouseenter", "a", function() {

  //Make sure table is empty
  $('#summary-table tbody tr').html('');

  //Execute ASM
  var asmPolicies = '';
  //Fetch id of a tag in the DOM
  var asmId = $(this).attr('id');
  for(var i = 0; i < asmData.length; i++) {
      if(asmId == asmData[i]['id']) {
          for(var j = 0; j < asmData[i]['policies'].length; j++){
              asmPolicies += '<tr><td>' + asmData[i]['policies'][j] + '</td></tr>';
          }
      }

  }
  //append asmPolicies Html to the table
  $('#summary-table tbody tr').append(asmPolicies);
  //END ASM
});

【问题讨论】:

  • 我看到的问题 #1 将 trs 附加到一个或多个 trs
  • 请点击edit,然后点击[&lt;&gt;] sn-p 编辑器,因为您的问题是关于前端的,请删除对后端的所有引用并发布对象和jQuery 的minimal reproducible example只有
  • 当你在 @Martin 的时候,你能不能也发布 asmData 的样本数据?
  • @jom asmData 在一个 Js 变量中,它保存了 asm PHP 变量的编码数据..
  • @mplungjan 已经使用后端代码来说明策略的 JSON 对象的数组集合,这些策略尝试单独迭代并在其各自的 thead 列下的表格中显示每个对象..

标签: javascript jquery laravel object for-loop


【解决方案1】:

几个问题 - 主要是

  • JSON 错误
  • 不解析对象
  • 将 trs 附加到 trs 而不是 tbody

注意链接上data属性的使用

const asmData = [{
  "id": "111",
  "policies": [{
      "name": "JOHN DOE 1",
      "sum_covered": "555000",
      "date": "2018-05-16 12:02:32"
    },
    {
      "name": "JOHN DOE 2",
      "sum_covered": "404000",
      "date": "2018-02-20 17:33:25"
    }
  ]
}, {
  "id": "222",
  "policies": [{
      "name": "JOHN DOE 3",
      "sum_covered": "555000",
      "date": "2018-05-16 12:02:32"
    },
    {
      "name": "JOHN DOE 4",
      "sum_covered": "404000",
      "date": "2018-02-20 17:33:25"
    }
  ]
}]



$(document).on("mouseenter", "a", function() {
  var $tb = $('#summary-table tbody');
  //Make sure table is empty

  $tb.empty()

  var asmId = $(this).attr('data-id'),
    asmPolicies = "";
  for (var i = 0; i < asmData.length; i++) {
    if (asmId == asmData[i]['id']) {
      for (var j = 0; j < asmData[i]['policies'].length; j++) {
        var pol = asmData[i]['policies'][j];
        asmPolicies += '<tr><td>' + pol.name + '</td><td>' + pol.sum_covered + '</td><td>' + pol.date + '</td><td>' + '</td></tr>';
      }
    }
  }
  //append asmPolicies Html to the table
  $tb.append(asmPolicies);

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="#" data-id="111">111</a> | <a href="#" data-id="222">222</a>

<div class="col-md-8">
  <table class="table table-hover mg-b-0 tx-11" id="summary-table">
    <thead>
      <tr>
        <th>NAME</th>
        <th>SUM</th>
        <th>DATE</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <!-- Add policies dynamically via JS under respective thead columns-->
      </tr>
    </tbody>
  </table>
</div>

【讨论】:

  • 非常感谢它工作正常...想添加一个功能,当页面加载时我会获取所有数据并在鼠标输入事件上执行逻辑.. 做到了,但我不断收到错误 asmData is not defined $( document ).ready(function() { var asmData = {!! json_encode($asm) !!}; }); 和鼠标事件后 ** $(document).on("mouseenter", "a", function() { } ); **
猜你喜欢
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多