javascript - 从对象数组中删除重复项但连接重复键
问题描述
我有一组看起来像这样的对象(示例)-
let arrTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 3"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
我想删除具有相同tableName的重复项,但将tableFooter连接到不会被删除的那些重复项中。
例如,预期的对象数组应该是 -
let newTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1 footer 3"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
我已经检查了有关如何删除重复项的其他问题,但是有没有一种更简单的方法可以连接一个键,而无需运行 for 循环并检查相同的 tableName 并创建一个将 tableFooter 保存在一个中的新键?
解决方案
我建议使用Array.reduce()
来获得所需的输出。
我们为每个 tableName 创建一个具有属性的对象,如果它已经存在,我们附加 tableFooter 值。
let arrTable = [
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 1"},
{ tableName: "name 2", tableDesc:"desc 2", tableFooter:"footer 2"},
{ tableName: "name 1", tableDesc:"desc 1", tableFooter:"footer 3"},
{ tableName: "name 3", tableDesc:"desc 3", tableFooter:"footer 4"},
{ tableName: "name 4", tableDesc:"desc 4", tableFooter:"footer 5"},
{ tableName: "name 5", tableDesc:"desc 5", tableFooter:"footer 6"},
{ tableName: "name 6", tableDesc:"desc 6", tableFooter:"footer 7"},
];
let newTable = Object.values(arrTable.reduce((acc, { tableName, tableFooter, ...rest}) => {
if (!acc[tableName]) {
acc[tableName] = { tableName, ...rest, tableFooter};
} else {
acc[tableName].tableFooter += ` ${tableFooter}`;
}
return acc;
}, {}))
console.log(newTable)
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - 谷歌地图 - 更改不同缩放级别上的所有标记大小 - map.data.setStyle
- phaser-framework - 从另一个身体的墙壁上弹起一个身体。Phaser3
- javascript - 使用正则表达式或替代方法检查字符串的第一个字符是否为数字或空格
- forms - 复选框在所有记录而不是选定记录上触发
- java - 在 Spring 中消耗大量 json 有效负载的最佳方法是什么?
- javascript - 轴未显示域中的第一个元素
- git - Git 与 Jenkins 的集成
- javascript - 如何在laravel中使用ajax删除图像
- java - 为什么杰克逊在重建配置模式以构建 CSV 记录行时包装包含逗号的字符串?
- c# - .Net Core 3.0 中的 RSA.Verify 问题