javascript - 如何将对象添加和更新到对象数组中?
问题描述
我正在尝试将对象动态添加到对象数组中,我一直在尝试解构主对象,但它在父数组的末尾添加了一个数字。这就是我所拥有的:
const [data, setData] = useState ([
{
_id:1,
firstName:'Leo',
lastName:'Miller',
telephone:'+569273829',
mail:'leo.miller@gmail.com',
work:[
{_id:1, startWorkDate:'01/01/2015', endWorkDate:'01/02/2017', work:'description...'},
{_id:2, startWorkDate:'01/01/2018', endWorkDate:'01/02/2020', work:'description...'}
]
}];
我动态生成这个对象:
const value = {_id:3, startWorkDate:'01/01/2018', endWorkDate:'01/02/2020', work:'description...'}
我需要将它添加到 data.work 之后只更新描述work._id[3]
我尝试使用此功能
const addNewWork = (value) => {
let copyData = [...data, data[0].workExperience.push(value)]
return setData(copyData)
}
但由于某种原因没有正确添加对象。请帮忙!
解决方案
你有一个数组而不是一个对象。你的陈述
let copyData = [...data, data[0].workExperience.push(value)]
正在做两件事:
- 通过做来改变状态
push()
。这不是反应方式。 - 创建一个新数组。还将一个新项目添加到数组中,但这是
data[0].workExperience
.
的返回值为Array.prototoype.push
:
调用方法的对象的新长度属性。
你要做的是:
制作数组的副本。可以...
在这里使用(扩展运算符)。
制作所需数组对象的副本(第一个索引)。尝试将对象添加到其特定属性workExperience
。
const addNewWork = (value) => {
let newData = [...data];
let newWorkExperienceArray =
[...data[0].workExperience,value];
let newDataFirstObject = {...data[0], workExperience : newWorkExperienceArray};
newData[0] = newDataFirstObject;
return setData(newData)
}
您还可以更新属性。我没有在您的问题中找到关于我必须更新什么的相关代码,所以我没有更新第三个 workExperience 对象中的任何内容。
编辑:在您的代码中,属性名称似乎是work
而不是workExperience
. 请确认。上面的代码使用,如果是这种情况workExperience
,您可以将其替换为work
推荐阅读
- python - 将列转换为多索引
- javascript - 按顺序异步推送到数组
- javascript - 自动格式化输入字段中输入的 10 位电话号码
- javascript - 如何在我的 react-leaflet 组件中设置状态
- c++ - 使用 C++ 的 UVA Judge Online 的运行时错误(问题 10050)
- c# - C# 温度转换器显示不正确的摄氏温度结果
- autohotkey - AutoHotKey 用百分比替换美元符号
- html - Angular 9 - 具有相同名称的不同formGroupName formControlName会影响相同的formControlName
- flutter - 颤振上的 Box2D 仿真非常缓慢
- html - 带有 CSS 的网站的可滚动背景图像封面