如何在ES6中基于指定键生成含嵌套结构的唯一对象数组
数组分组转换实现方案
需求描述
将包含name、resigned、certificate_number、venue属性的对象数组转换为新数组:新数组中每个对象的name与resigned组合唯一,其余属性以嵌套对象数组形式存入restArr字段。
给定原数组
let arr = [ { name : "jhon", resigned : "false", certificate_number : "1234556", venue : "abc" }, { name : "jhon", resigned : "false", certificate_number : "ABC1234", venue : "xyz" }, { name : "jhon", resigned : "false", certificate_number : "111111", venue : "lkj" }, { name : "George", resigned : "false", certificate_number : "1234556xyzz", venue : "abc" }, ]
期望结果数组
let result = [ { name : "jhon", resigned : "false", restArr : [ { certificate_number : "1234556", venue : "abc" }, { certificate_number : "ABC1234", venue : "xyz" }, { certificate_number : "111111", venue : "lkj" } ], }, { name : "George", resigned : "false", restArr : [ { certificate_number : "1234556xyzz", venue : "abc" }, ], } ]
实现代码
const arr = [ { name: "jhon", resigned: "false", certificate_number: "1234556", venue: "abc" }, { name: "jhon", resigned: "false", certificate_number: "ABC1234", venue: "xyz" }, { name: "jhon", resigned: "false", certificate_number: "111111", venue: "lkj" }, { name: "George", resigned: "false", certificate_number: "1234556xyzz", venue: "abc" }, ]; const result = Object.values(arr.reduce((acc, current) => { // 生成唯一分组标识key const key = `${current.name}-${current.resigned}`; // 初始化分组对象(若不存在) if (!acc[key]) { acc[key] = { name: current.name, resigned: current.resigned, restArr: [] }; } // 提取非分组属性存入restArr acc[key].restArr.push({ certificate_number: current.certificate_number, venue: current.venue }); return acc; }, {})); console.log(result);
实现思路
- 分组标识:用
name和resigned拼接成唯一字符串作为分组key,确保同一组合的对象被归为一组。 - 累加器处理:通过
reduce遍历原数组,累加器对象存储每个分组的信息,若分组不存在则初始化结构。 - 属性提取:每次遍历将当前对象的
certificate_number和venue提取出来,推入对应分组的restArr。 - 结果转换:最后用
Object.values()将累加器的分组对象转换为数组,得到最终结构。
内容的提问来源于stack exchange,提问作者hargun singh
相关产品推荐
相关产品推荐

