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

克隆JavaScript对象并修改嵌套属性值时遇到的错误问题

问题原因分析

你当前代码的问题在于:data1.connections是一个数组,你用{...data1.connections}把整个数组展开到了对象中,JavaScript会把数组的索引(比如0)转为对象的键、数组元素对应值,再加上你额外添加的status: 'passive',就出现了不符合预期的结构。

正确实现方法

根据你的需求,分两种场景提供解决方案:

场景1:仅修改connections数组中第一个元素的status

如果确定connections数组只有一个元素,直接访问数组下标并克隆修改:

const data1 = {
    connections: [
      {
        id: 'abfd6e01',
        status: 'active',
        created: '2023-05-10T11:30:25.0000000Z',
      },
    ],
    description: 'Mocked description',
    id: '0e8eabf6',
    name: 'Mocked Company',
  };

const data2 = {
  ...data1, // 克隆原对象的其他属性
  connections: [
    { ...data1.connections[0], status: 'passive' } // 克隆数组第一个元素并修改status
  ]
};

场景2:批量修改connections数组中所有元素的status

如果数组可能包含多个元素,需要统一修改每个元素的status,使用map方法遍历处理:

const data2 = {
  ...data1,
  connections: data1.connections.map(item => ({
    ...item, // 克隆每个数组元素
    status: 'passive' // 修改status属性
  }))
};
验证结果

两种方法最终都会得到符合预期的结果:

{
  connections: [
    {
      id: 'abfd6e01',
      status: 'passive',
      created: '2023-05-10T11:30:25.0000000Z',
    },
  ],
  description: 'Mocked description',
  id: '0e8eabf6',
  name: 'Mocked Company',
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:17:18