如何按ID将单个包含多组属性的对象拆分为多个独立对象?
如何拆分带索引后缀的对象为独立实体对象?
现有如下结构的对象:
const obj = { ['name-1']: 'Peter', ['name-2']: 'Mark', ['name-3']: 'Rich', ['age-1']: 25, ['age-2']: 30, ['age-3']: 45 }需要将其拆分为3个独立对象,形式如下:
const obj1 = { ['name-1']: 'Peter', ['age-1']: 25 } const obj2 = { ['name-2']: 'Mark', ['age-2']: 30 } const obj3 = { ['name-3']: 'Rich', ['age-3']: 45 }请问如何实现该需求?
嘿,这个需求其实挺常见的,核心就是根据键名里的数字索引来分组。我给你分享两种实用的实现方式,你可以根据场景选择:
方法一:通用分组法(适配任意数量的对象)
这种方法适合不确定最终要拆分出多少个对象的场景,逻辑是先按索引把键值对分组,再转换成独立对象:
const obj = { ['name-1']: 'Peter', ['name-2']: 'Mark', ['name-3']: 'Rich', ['age-1']: 25, ['age-2']: 30, ['age-3']: 45 }; // 创建临时映射表,按索引存储对应键值对 const groupedMap = {}; // 遍历原对象的所有键 Object.keys(obj).forEach(key => { // 提取键名中的索引部分(比如从'name-1'中拿到'1') const index = key.split('-')[1]; // 如果映射表中没有该索引的对象,就初始化一个空对象 if (!groupedMap[index]) { groupedMap[index] = {}; } // 将当前键值对添加到对应索引的对象中 groupedMap[index][key] = obj[key]; }); // 把映射表的值转换成数组,再解构为独立变量 const [obj1, obj2, obj3] = Object.values(groupedMap); console.log(obj1); // { 'name-1': 'Peter', 'age-1': 25 } console.log(obj2); // { 'name-2': 'Mark', 'age-2': 30 } console.log(obj3); // { 'name-3': 'Rich', 'age-3': 45 }
方法二:手动提取法(适合固定数量的对象)
如果明确知道要拆分出3个对象,也可以直接手动提取键值对,代码更直观:
const obj = { ['name-1']: 'Peter', ['name-2']: 'Mark', ['name-3']: 'Rich', ['age-1']: 25, ['age-2']: 30, ['age-3']: 45 }; const obj1 = { ['name-1']: obj['name-1'], ['age-1']: obj['age-1'] }; const obj2 = { ['name-2']: obj['name-2'], ['age-2']: obj['age-2'] }; const obj3 = { ['name-3']: obj['name-3'], ['age-3']: obj['age-3'] };
小提示
- 方法一的扩展性更强,哪怕后续原对象新增了
name-4、age-4这类键,代码不需要修改就能自动拆分出第四个对象。 - 方法二的代码更简洁,适合对象数量固定且较少的场景。
内容的提问来源于stack exchange,提问作者Oleksandr Fomin
相关产品推荐
相关产品推荐

