如何按paymentId合并对象数组的label并生成指定格式输出?
合并相同paymentId的label字段实现方案
可以利用JavaScript的Array.prototype.reduce()方法实现分组合并,具体代码如下:
原数据
const originalArray = [ { label: 'General-A-5', paymentId: 1, }, { label: 'General-A-4', paymentId: 1, }, { label: 'General-A-3', paymentId: 2, } ];
实现代码
const mergedArray = originalArray.reduce((acc, current) => { // 查找当前paymentId对应的已有分组 const existingItem = acc.find(item => item.paymentId === current.paymentId); if (existingItem) { // 存在则用英文逗号拼接label existingItem.label += `,${current.label}`; } else { // 不存在则新增分组项(用扩展运算符避免原对象引用问题) acc.push({ ...current }); } return acc; }, []); console.log(mergedArray);
输出结果
[ { label: 'General-A-5,General-A-4', paymentId: 1, }, { label: 'General-A-3', paymentId: 2, } ]
逻辑说明
- 用
reduce遍历原数组,累加器acc用来存储分组后的结果数组 - 每遍历一项,检查当前
paymentId是否已在累加器中存在对应项:- 存在则直接拼接
label字段 - 不存在则将当前对象的副本推入累加器
- 存在则直接拼接
- 最终得到的
mergedArray即为符合需求的结果
内容的提问来源于stack exchange,提问作者Khalid
相关产品推荐
相关产品推荐

