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
]
}
}))