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

如何将单对象数组项拆分为包含三个对象的数组?

问题:如何更简洁地拆分对象结构?

给定如下响应数据结构:

const res = {
  data: [{
    name: 'c2',
    ipaddr: '192.168.1.5',
    port: 4435,
    sshuser: "abc",
    sshpass: "xyz",
    sshport: 22,
    license: 'license.txt',
  }],
};

需要将其转换为:

const newState = [{
  name: 'c2',
  ipaddr: '192.168.1.5',
  port: 4435,
}, {
  sshuser: "abc",
  sshpass: "xyz",
  sshport: 22,
}, {
  license: 'license.txt',
}]

目前已有如下实现:

var obj1 = {
  name: res.data[0].name,
  ipaddr: res.data[0].ipaddr,
  port: res.data[0].port,
};
var obj2 = {
  sshuser: res.data[0].sshuser,
  sshpass: res.data[0].sshpass,
  sshport: res.data[0].sshport,
};
var obj3 = {
  license: res.data[0].license,
};
const newState = [obj1, obj2, obj3];

请问有没有其他更简洁的语法实现这个需求?


简洁实现方案

方法1:对象解构+字面量数组(最直观简洁)

通过对象解构一次性提取原对象的所有属性,直接创建目标数组的子对象,省去中间变量:

const { name, ipaddr, port, sshuser, sshpass, sshport, license } = res.data[0];
const newState = [
  { name, ipaddr, port },
  { sshuser, sshpass, sshport },
  { license }
];

ES6的属性简写语法让代码更紧凑,可读性也很强,是最推荐的方案。

方法2:抽离分组规则(可扩展性更强)

如果后续分组规则可能变化,或者属性数量较多,可以先定义分组的属性列表,再通过map和reduce生成目标结构:

// 定义分组规则,后续修改只需调整这里
const propertyGroups = [
  ['name', 'ipaddr', 'port'],
  ['sshuser', 'sshpass', 'sshport'],
  ['license']
];

const targetItem = res.data[0];
const newState = propertyGroups.map(group => 
  group.reduce((resultObj, key) => ({ ...resultObj, [key]: targetItem[key] }), {})
);

这种方式把业务逻辑和数据结构分离,维护起来更方便,适合复杂场景。

方法3:自执行函数+展开语法(极致紧凑)

如果追求代码行数最少,可以结合自执行函数和解构来写,不过可读性略逊于前两种:

const targetItem = res.data[0];
const newState = [
  { ...(({ name, ipaddr, port }) => ({ name, ipaddr, port }))(targetItem) },
  { ...(({ sshuser, sshpass, sshport }) => ({ sshuser, sshpass, sshport }))(targetItem) },
  { ...(({ license }) => ({ license }))(targetItem) }
];

内容的提问来源于stack exchange,提问作者Kamal Palei

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:01:24