You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:48:10