javascript - 根据对象数组中的值属性查找重复对象,然后在其标签属性中减少连接重复对象的数组
问题描述
假设我有一个这样的对象数组:
[
{value: "2021", label: "REDS"},
{value: "2020", label: "REDS"},
{value: "2021", label: "COPASA"},
{value: "2021", label: "CEMIG_CLIENTES"},
{value: "2016", label: "CEMIG_CLIENTES"},
{value: "2016", label: "RFQSA"}
]
我需要的是根据 value 属性找到重复的条目并输出一个连接其 label 属性的新数组。所以结果会是这样的:
[
{value: "2021", label: "REDS/COPASA/CEMIG_CLIENTES"},
{value: "2020", label: "REDS"},
{value: "2016", label: "CEMIG_CLIENTES/RFQSA"}
]
我怎样才能做到这一点?我被困住了。我尝试获得独特的价值并通过以下方式实现它:
const unique = arr.map(e => e['value'])
.map((e, i, final) => final.indexOf(e) === i && i)
.filter(obj=> aux2[obj])
.map(e => aux2[e]);
但是这还不够,因为标签不会丢失,我还考虑过对数组进行排序并运行一个函数来获取重复项的位置,然后通过将它们合并在一起来弹出下一个出现的位置。但我还没有能够实现它。有没有更好的办法?如果没有,任何人都可以阐明如何做到这一点?
提前致谢!
解决方案
let combineSimilar = (arr) => {
let map = {};
arr.forEach(x => {
if (!map[x.value]) map[x.value] = {
value: x.value,
label: x.label
}
else map[x.value].label += "/" + x.label
})
return Object.values(map)
}
console.log(combineSimilar([
{value: "2021", label: "REDS"},
{value: "2020", label: "REDS"},
{value: "2021", label: "COPASA"},
{value: "2021", label: "CEMIG_CLIENTES"},
{value: "2016", label: "CEMIG_CLIENTES"},
{value: "2016", label: "RFQSA"}
]))
推荐阅读
- pagination - Spring data jpa分页可以编辑计数查询吗?
- python - 向在 for 循环中不起作用的 pandas 数据帧的每一行添加一个值
- python - Python asyncio.Semaphore 的有序执行
- java - 将一个字母的一个实例替换为 2 个以上递归的代码
- ros - ROS - 将 Float64MultiArray 转换为 PointCloud2
- c - 无法动态分配字符串
- sql - SQL 如何获取列中的前两位数字?
- python-3.x - 将数字列从 url 保存到 python 数组
- python - 如何加载保存的 DNN 估计器模型进行预测?
- git - Github 错误“更新被拒绝,因为您当前分支的尖端落后”