本文档将指导你如何使用 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>。
注意事项:
- 上述代码只是一个简单的示例,实际应用中可能需要根据具体需求进行修改。例如,可以添加 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 等。
css javascript java html 前端 red JavaScript css html 字符串 数据结构 对象 dom border table tbody