You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery为对象批量赋值失败,求解决方案

问题分析与解决方案

核心问题

你当前的代码存在两个关键问题:

  • 每次循环通过Object.assign给obj赋值时,都会覆盖掉之前的name和email属性,最终obj只会保留最后一行表格的数据
  • 没有排除底部包含输入框的<tr>,这一行的文本内容为空,会污染最终结果

解决方案

根据需求,有两种常见的实现方式:

方式1:将所有用户数据存储为对象数组(推荐)

如果需要保留所有行的用户信息,用数组存储每个用户的对象是更合理的选择:

$(document).ready(function () {
  console.log("rendered.");

  var trs = $("#myTable").find("tbody>tr");
  // 用数组存储多个用户对象
  var userList = [];

  $(trs).each(function (index, content) {
    var $tr = $(content);
    // 跳过包含输入框的行
    if ($tr.hasClass("insert_td_after_it")) return;

    var name = $tr.find("td:eq(0)").text().trim();
    var email = $tr.find("td:eq(1)").text().trim();

    // 仅添加有有效内容的条目
    if (name && email) {
      userList.push({ name: name, email: email });
    }
  });

  console.log(userList);
  // 输出结果:[{name: "John", email: "john@example.com"}, {name: "Smith", email: "smith@example.com"}]
});

方式2:将名字作为键,邮箱作为值存储到对象中

如果需要快速通过名字查找对应的邮箱,可以用键值对形式存储:

$(document).ready(function () {
  console.log("rendered.");

  var trs = $("#myTable").find("tbody>tr");
  var userMap = {};

  $(trs).each(function (index, content) {
    var $tr = $(content);
    if ($tr.hasClass("insert_td_after_it")) return;

    var name = $tr.find("td:eq(0)").text().trim();
    var email = $tr.find("td:eq(1)").text().trim();

    if (name && email) {
      // 用名字作为对象键,邮箱作为对应值
      userMap[name] = email;
    }
  });

  console.log(userMap);
  // 输出结果:{John: "john@example.com", Smith: "smith@example.com"}
});

关键改进点

  • 使用数组存储多组数据,避免属性被重复覆盖
  • 通过hasClass过滤掉带输入框的行,避免引入空值
  • 用trim()去除文本前后的空白字符,保证数据整洁
  • 增加非空判断,确保只存入有效数据

内容的提问来源于stack exchange,提问作者Liakat Hossain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:37:40