Javascript 将项推送到嵌套对象数组

Javascript 将项推送到嵌套对象数组,javascript,reactjs,Javascript,Reactjs,我有一个具有以下结构的嵌套对象的对象,如何将新项目(newData)动态添加到cost3数组中 我已经试过了,但是新数据没有被推送,我做错了什么 const [file, setFile] = useState({}) setFile(file=> ({ ...file, [cost3]: { ...file.cost3, newData } })) 文件对象: { "info": {

我有一个具有以下结构的嵌套对象的对象,如何将新项目(
newData
)动态添加到
cost3
数组中

我已经试过了,但是新数据没有被推送,我做错了什么

const [file, setFile] = useState({})

setFile(file=> ({
      ...file,
      [cost3]: {
          ...file.cost3,
          newData
      }
}))
文件
对象:

{
      "info": {

      },
      "client": {

      },
      "costs": {
        "cost1": 1,
        "cost2": 5,
        "cost3": [
          {
            "a": "test",
            "b": "test",
            "c": "test",
          },
          {
            "d": "test",
            "e": "test",
            "f": "test",
          },
         //etc..       
        ],
        "cost4": [
          {
            "l": "test",
            "n": "test",
            "m": "test",
          },
        //etc..
        ]
      }
    }
const文件={
“信息”:{
},
“客户”:{
},
“费用”:{
“成本1”:1,
“成本2”:5,
“成本3”:[{
“a”:“测试”,
“b”:“测试”,
“c”:“测试”,
},
{
“d”:“测试”,
“e”:“测试”,
“f”:“测试”,
},
//等等。。
],
“成本4”:[{
“l”:“测试”,
“n”:“测试”,
“m”:“测试”,
},
//等等。。
]
}
}
const newData={x:'我是新的'}
console.log(
{
文件
费用:{
…文件成本,
成本3:[
…file.costs.cost3,
新数据
]
}
}
)
您可以使用
.push()
方法将项添加到对象中,对于动态添加,您可以迭代数组。

您可以使用

你的代码不正确。 将
[cost3]
替换为
cost3
{}
替换为
[]
,如下所示:

setFile(file=> ({
      ...file,
      costs: {
        ...file.costs,
        cost3: [
          ...file.costs.cost3,
          newData
        ]
      }
}))

setFile中的
[const3]
是什么,我看不到您在任何地方定义了const3变量。我建议使用concat而不是push,因为push会改变数组。看起来OP试图设置
file.const.const3
,但因为文件是用
{}初始化的
尝试传播file.const.const3将抛出,因为const最初未定义。如果您看到状态是如何初始化的,
useState({})
您可以得出结论,
…file.costs.cost3,
将抛出一个“const3 of undefined”错误,那么最好使用某种类型的。我建议使用某种方法来减少出错的可能性。
setFile(file=> ({
      ...file,
      costs: {
        ...file.costs,
        cost3: [
          ...file.costs.cost3,
          newData
        ]
      }
}))