javascript - forEach 只打印最后一个值,这是 javascript 中典型的闭包问题

标签 javascript foreach

我尝试使用这种方法来解决任何关闭问题,但显然这对我不起作用。我尝试将其更改为 letconst 甚至箭头函数,但代码始终打印最后一个数组元素。

谁能告诉我我做错了什么:

var data = [{
  "first_name": "John",
  "last_name": "Doe",
  "phone": "31227-5325"
}, {
  "first_name": "Jane",
  "last_name": "Campbell",
  "phone": "123123-5325"
}];

window.onload = function() {
  console.log('loaded....');
  data.forEach(function(elem, index) {

    let p = index;
    document.querySelector('#fname').innerHTML = '<td>' + data[p].first_name + '</td>';
    document.querySelector('#lname').innerHTML = '<td>' + data[p].last_name + '</td>';
    document.querySelector('#phone').innerHTML = '<td>' + data[p].phone + '</td>';

  })

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-border">
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Phone</th>
    </tr>
  </thead>
  <tr class="tr1">
    <td id="fname"></td>
    <td id="lname"></td>
    <td id="phone"></td>
  </tr>

</table>

http://jsbin.com/gasegeqila/1/edit?js,output

谢谢

最佳答案

你的问题是因为你在循环中设置了相同元素的值,所以只有上一次迭代中设置的值是可见的。

您需要在循环中创建一个新行并在其中设置值,如下所示:

var data = [{
  "first_name": "John",
  "last_name": "Doe",
  "phone": "31227-5325"
}, {
  "first_name": "Jane",
  "last_name": "Campbell",
  "phone": "123123-5325"
}];

window.onload = function() {
  var tbody = document.querySelector('table tbody');
  
  data.forEach(function(elem, index) {
    var tr = document.createElement('tr');
    tr.innerHTML = `<td>${data[index].first_name}</td><td>${data[index].last_name}</td><td>${data[index].phone}</td>`;
    tbody.appendChild(tr);
  })
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="table table-border">
  <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Phone</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

关于javascript - forEach 只打印最后一个值,这是 javascript 中典型的闭包问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808693/

相关文章:

javascript - 返回回调函数的值?

javascript - 解析服务器串联保存数据

php - 遍历 $_POST 并添加到数据库

javascript - 如何使用reduce()来模仿forEach()的功能?

javascript - 什么是 JavaScript 数组突变?

javascript - 如何只绘制这部分圆弧?

javascript - CSS 列仅在 Safari/Mac 上消失

php - 每个查询有两个循环

c# - 在 C# : what iteration is this? 中调试 foreach 循环

java - 有没有我可以在 Java 中使用的参数,它适用于所有 for-each 循环?