使用 JavaScript 合并具有相同 ID 的对象并在 HTML 表格中显示

花韻仙語
发布: 2025-09-13 21:30:02
原创
457人浏览过

使用 javascript 合并具有相同 id 的对象并在 html 表格中显示

本文档将指导你如何使用 JavaScript 将具有相同 reference 属性的对象合并成一个对象,并将结果以特定格式展示在 HTML 表格中。我们将使用 reduce() 方法对原始数组进行处理,并最终生成符合要求的表格数据结构,以便在前端页面进行渲染。

数据合并

首先,我们需要将具有相同 reference 值的对象合并。可以使用 reduce() 方法来实现这个功能。

let arr = [{
  reference: "A2",
  sendTo: "USA",
  item: "sticker",
  sku: 0921380,
  quantity: 1
},
{
  reference: "A2",
  sendTo: "USA",
  item: "toy",
  sku: 0921381,
  quantity: 2
}, {
  reference: "A2",
  item: "pencil",
  sku: 0921382,
  quantity: 2
},
 {
  reference: "A3",
  item: "sticker",
  sendTo: "USA",
  sku: 0921380,
  quantity: 2
}];

let result = arr.reduce((previousValue, currentValue) => {
    let exists = previousValue.find(i => i.reference === currentValue.reference);
    if (exists) {
        exists.item += ', ' + currentValue.item;
        exists.sku += ', ' + currentValue.sku;
        exists.quantity += ', ' + currentValue.quantity;
    } else {
        previousValue.push(currentValue);
    }
    return previousValue;
}, []);

console.log(result);
登录后复制

这段代码的核心是 reduce 函数。它遍历原始数组 arr,并根据 reference 属性将具有相同 reference 值的对象合并。如果 previousValue 中已经存在具有相同 reference 值的对象,则将当前对象的 item、sku 和 quantity 属性追加到已存在对象的对应属性中;否则,将当前对象直接添加到 previousValue 中。

生成 HTML 表格

接下来,我们需要将合并后的数据转换成 HTML 表格。这里提供一个通用的 JavaScript 函数,可以将数据渲染成表格字符串:

立即学习Java免费学习笔记(深入)”;

function generateTable(data) {
  let tableHTML = '<table border="1">'; // 简单起见,使用 border="1"

  // 添加表头
  if (data.length > 0) {
    tableHTML += '<thead><tr>';
    for (let key in data[0]) {
      tableHTML += '<th>' + key + '</th>';
    }
    tableHTML += '</tr></thead>';
  }

  // 添加表体
  tableHTML += '<tbody>';
  data.forEach(item => {
    tableHTML += '<tr>';
    for (let key in item) {
      tableHTML += '<td>' + item[key] + '</td>';
    }
    tableHTML += '</tr>';
  });
  tableHTML += '</tbody></table>';

  return tableHTML;
}

// 使用示例
let tableHTML = generateTable(result);
document.body.innerHTML = tableHTML; // 将表格添加到页面中
登录后复制

这段代码首先定义了一个 generateTable 函数,它接受一个数据数组作为参数。函数首先创建一个 <table> 元素,然后根据数据的键生成表头 <thead>,最后遍历数据数组,生成表体 <tbody>。

标书对比王
标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王 58
查看详情 标书对比王

注意事项:

  • 上述代码只是一个简单的示例,实际应用中可能需要根据具体需求进行修改。例如,可以添加 CSS 样式来美化表格,或者使用更复杂的 JavaScript 库来生成表格。
  • 对于大型数据集,直接操作 DOM 可能会影响性能。可以考虑使用虚拟 DOM 或其他优化技术。
  • 代码中使用了 border="1" 属性来显示表格边框,实际应用中建议使用 CSS 来控制表格样式。

根据需求定制表格结构

根据题目要求,我们需要生成具有特定结构的表格,即当 reference 值相同时,后续行的 reference 和 sendTo 单元格为空。为了实现这个需求,我们需要对 generateTable 函数进行修改。

function generateCustomTable(data) {
  let tableHTML = '<table border="1">';
  tableHTML += '<thead><tr><th>reference</th><th>sendTo</th><th>item</th><th>sku</th><th>quantity</th></tr></thead>';
  tableHTML += '<tbody>';

  let lastReference = null;

  data.forEach(item => {
    tableHTML += '<tr>';
    if (item.reference !== lastReference) {
      tableHTML += '<td>' + item.reference + '</td>';
      tableHTML += '<td>' + (item.sendTo || '') + '</td>'; //sendTo 可能不存在
      lastReference = item.reference;
    } else {
      tableHTML += '<td></td>';
      tableHTML += '<td></td>';
    }
    tableHTML += '<td>' + item.item + '</td>';
    tableHTML += '<td>' + item.sku + '</td>';
    tableHTML += '<td>' + item.quantity + '</td>';
    tableHTML += '</tr>';
  });

  tableHTML += '</tbody></table>';
  return tableHTML;
}

let customTableHTML = generateCustomTable(result);
document.body.innerHTML = customTableHTML;
登录后复制

这段代码的关键在于使用 lastReference 变量来记录上一个 reference 值。如果当前对象的 reference 值与 lastReference 相同,则将 reference 和 sendTo 单元格设置为空;否则,正常显示 reference 和 sendTo 的值,并更新 lastReference。

总结

本文档介绍了如何使用 JavaScript 将具有相同 reference 属性的对象合并,并将结果以特定格式展示在 HTML 表格中。我们使用了 reduce() 方法来合并数据,并编写了自定义的 generateTable 函数来生成 HTML 表格。通过修改 generateTable 函数,我们可以灵活地定制表格的结构,以满足不同的需求。在实际应用中,可以根据具体情况对代码进行优化和扩展,例如添加 CSS 样式、使用虚拟 DOM 等。

以上就是使用 JavaScript 合并具有相同 ID 的对象并在 HTML 表格中显示的详细内容,更多请关注php中文网其它相关文章!

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号