【问题标题】:How to add table row data to an array如何将表格行数据添加到数组
【发布时间】:2021-07-01 21:21:21
【问题描述】:

目标:获取所有表格行(单元格)数据并添加到数组中

问题:如果多于 1 行,它会覆盖先前添加的数组条目,而不是将其添加到数组的末尾。这会导致数组的最后一个表行数据集重复/三次/等(与表中存在的行一样多)

设置: 我有一个动态 html 表,用户可以通过输入用户名和年龄来添加行,然后单击“添加”按钮。 Load 按钮必须获取表体元素并填充一个对象,在 for 循环之后必须获取 innerText,更新对象并将对象 push() 到数组中。但这是结果: Screenshot of console.log of array

let roleArr = [];
loadBtn.addEventListener("click", () => {
  roleTableData();
});

function roleTableData() {
  let test = tblRows.children;
  const collectRoles = {
    uName: "",
    uAge: "",
  };

  for (let i = 0; i < test.length; i++) {
    collectRoles.uName= test[i].children[0].innerText;
    collectRoles.uAge= test[i].children[1].innerText;
    roleArr.push(collectRoles);
  }
}

【问题讨论】:

  • 为什么不将代码重构为首先将姓名和年龄作为对象添加到数组中,然后使用数组创建表?然后,您只需管理数据,而不是管理 html,而是让模板在每次创建对象时创建一个新行。
  • 感谢@Chris 的建议。我目前正在研究该选项。按照你建议的方式做会更有意义。

标签: javascript arrays object dynamic push


【解决方案1】:

由于您对每个错误使用相同的 collectRoles 对象,因此您正在重新定义所有对象,因为它们是同一对象的引用。

您可以研究“JavaScript 中的引用与价值”以更好地理解为什么会这样。

我会这样写你的 roleTableData 函数:

function roleTableData() {
  roleArr = [...tblRows.children].map(tr => {
    return {
      uName: tr.children[0].innerText,
      uAge: tr.children[1].innerText
    };
  });
}

【讨论】:

  • 感谢您的回复。我现在正在研究扩展运算符,以了解您建议的代码到底在做什么。了解后我再回复
  • 在这种情况下,展开运算符用于将nodeList(类似于数组,但不能使用map 数组方法迭代)转换为实际数组。看到这个问题:stackoverflow.com/questions/7459704/…
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2021-01-10
相关资源
最近更新 更多