如何在TypeScript中根据对象属性合并数组的propId值?
TypeScript实现按动态prop合并数组元素
问题描述
现有如下格式的数组:
const example = [ { "prop": "test", "propId": [1] }, { "prop": "test", "propId": [2] }, { "prop": "test", "propId": [3] }, { "prop": "test2", "propId": [4] }, { "prop": "test2", "propId": [5] } ];
需要根据prop属性的动态值合并数组元素,将相同prop对应的propId合并为一个数组,期望输出:
const output = [ { "prop": "test", "propId": [1, 2, 3] }, { "prop": "test2", "propId": [4, 5] } ];
实现代码
// 定义元素类型约束 interface Item { prop: string; propId: number[]; } function mergeByProp(items: Item[]): Item[] { // 用Map存储已处理的prop对应的合并结果 const propMap = new Map<string, Item>(); for (const item of items) { const existing = propMap.get(item.prop); if (existing) { // 合并已有prop对应的propId数组 existing.propId = [...existing.propId, ...item.propId]; } else { // 首次遇到该prop,存入Map propMap.set(item.prop, { ...item }); } } // 将Map中的值转换为目标数组返回 return Array.from(propMap.values()); } // 测试示例 const example = [ { prop: "test", propId: [1] }, { prop: "test", propId: [2] }, { prop: "test", propId: [3] }, { prop: "test2", propId: [4] }, { prop: "test2", propId: [5] } ]; const output = mergeByProp(example); console.log(output);
代码说明
- 用
Item接口约束数组元素类型,符合TypeScript的类型安全要求。 - 使用
Map作为中间存储,能兼容任意合法字符串类型的prop值,避免普通对象键的类型限制。 - 遍历原数组时,对每个元素判断是否已存在对应
prop的合并项,存在则合并propId,不存在则新增项。 - 最后通过
Array.from将Map的取值转换为目标格式的数组。
内容的提问来源于stack exchange,提问作者cyro.alves
相关产品推荐
相关产品推荐

