如何将数组中同category_name对象合并并归集ID数组
合并数组中相同分类的ID集合
给定如下结构的数组:
const originalArray = [ {category_name: "category_1", id: [1]}, {category_name: "category_2", id: [1]}, {category_name: "category_1", id: [2]}, {category_name: "category_3", id: [2]}, {category_name: "category_2", id: [3]}, {category_name: "category_2", id: [4]}, {category_name: "category_3", id: [4]}, {category_name: "category_2", id: [5]}, {category_name: "category_3", id: [5]}, {category_name: "category_3", id: [6]}, ];
需要将相同category_name的项合并,把对应的id归集到同一个数组中,得到如下结果:
[ {category_name: "category_1", id: [1,2]}, {category_name: "category_2", id: [1,3,4,5]}, {category_name: "category_3", id: [2,4,5,6]}, ]
可以用JavaScript的reduce方法实现这个需求,核心是用临时对象缓存分类信息,遍历更新后转成数组即可:
const mergedArray = Object.values( originalArray.reduce((acc, item) => { // 初始化未存在的分类项 if (!acc[item.category_name]) { acc[item.category_name] = { category_name: item.category_name, id: [] }; } // 合并当前项的ID到对应分类的数组 acc[item.category_name].id.push(...item.id); return acc; }, {}) ); console.log(mergedArray);
补充处理重复ID
如果原始数据中同一分类下存在重复ID,可以用Set去重,修改合并逻辑:
acc[item.category_name].id = [...new Set([...acc[item.category_name].id, ...item.id])];
内容的提问来源于stack exchange,提问作者codeko
相关产品推荐
相关产品推荐

