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

如何按唯一prv_codigo合并数组对象:拼接agrupaciones并保留首个icon

数组分组与属性拼接实现方案

需求说明

将原始数组按prv_codigo分组,同一组的tagrupaciones拼接为逗号分隔的字符串,保留每组第一个出现的icon,最终得到由唯一对象组成的数组。

原始数组

const results: any[] = [
  { prv_codigo: 1, tagrupaciones: 'apple', icon: 'fruit' },
  { prv_codigo: 1, tagrupaciones: 'pinia', icon: 'tropical_fruit' },
  { prv_codigo: 1, tagrupaciones: 'melon', icon: 'fruit' },
  { prv_codigo: 1, tagrupaciones: 'banana', icon: 'tropical_fruit' },
  { prv_codigo: 2, tagrupaciones: 'apple', icon: 'fruit' },
];

实现方案一:使用reduce遍历处理

const newResults = results.reduce((acc, current) => {
  const existingItem = acc.find(item => item.prv_codigo === current.prv_codigo);
  if (existingItem) {
    existingItem.tagrupaciones += `,${current.tagrupaciones}`;
  } else {
    acc.push({
      prv_codigo: current.prv_codigo,
      tagrupaciones: current.tagrupaciones,
      icon: current.icon
    });
  }
  return acc;
}, [] as any[]);

实现方案二:使用Map优化性能(适合大数据量)

const groupMap = new Map<number, any>();

results.forEach(item => {
  const key = item.prv_codigo;
  if (!groupMap.has(key)) {
    groupMap.set(key, {
      prv_codigo: key,
      tagrupaciones: item.tagrupaciones,
      icon: item.icon
    });
  } else {
    const targetItem = groupMap.get(key);
    targetItem.tagrupaciones += `,${item.tagrupaciones}`;
  }
});

const newResults = Array.from(groupMap.values());

最终结果

两种方案均会得到目标数组:

[
  { prv_codigo: 1, tagrupaciones: 'apple,pinia,melon,banana', icon: 'fruit' },
  { prv_codigo: 2, tagrupaciones: 'apple', icon: 'fruit' }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:37