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

如何为对象嵌套数组中的内层multiple数组追加新元素?

问题与解决方案

原对象结构

let obj= {
  title:"my form",
  endTIme:"2/20/22",
  mainList:[
    {
      type:"multiple", 
      checked:false,
      multiple:[
         {
           optionCheck: false,
           optionAnswer:""
         }
      ]
    }
  ]
}

需求

点击按钮时保留所有字段值,仅给mainList里第一个元素的multiple数组追加一个新对象,最终结构如下:

let obj = {
  title: "my form",
  endTIme: "2/20/22",
  mainList: [{
    type: "multiple",
    checked: false,
    multiple: [
    {
      optionCheck: false,
      optionAnswer: ""
    }, 
    {
      optionCheck: false,
      optionAnswer: ""
    }]
  }]
};

你之前的错误

你写的代码是给mainList数组追加了一个新元素,而不是修改现有元素的multiple数组,导致mainList元素重复:

let newObj= {
 ...obj
  mainList:[
     ...obj.mainList,
    {
      multiple:[
         {
           optionCheck: false,
           optionAnswer:""
         }
      ]
    }
  ]
}

正确实现代码

const newObj = {
  ...obj,
  mainList: obj.mainList.map((item, index) => {
    // 只处理mainList里的第一个元素
    if (index === 0) {
      return {
        ...item,
        // 给当前元素的multiple数组追加新对象
        multiple: [
          ...item.multiple,
          { optionCheck: false, optionAnswer: "" }
        ]
      };
    }
    // 其他元素直接拷贝保留原结构
    return { ...item };
  })
};

代码说明

  • 用...obj复制原对象的顶层属性,确保title、endTIme不变。
  • 遍历mainList,对目标元素(这里是第一个)进行深一层的拷贝:保留它的type、checked,同时扩展multiple数组,加入新的选项对象。
  • 如果mainList里有多个元素,需要按type筛选目标元素,可以把判断条件改成if (item.type === "multiple"),这样不管位置在哪,只要是多选类型的元素都会被修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:35:30