替换 Javascript 中嵌套对象中的数组
Replace array in nested object in Javascript
我一天中的大部分时间都在尝试替换现有嵌套对象的数组,但我不知道该怎么做。这是我的原始对象:
{
"id": "a8df1653-238a-4f23-fe42-345c5d928b34",
"webSections": {
"id": "x58654a9-283b-4fa6-8466-3f7534783f8",
"sections": [
{
"id": "92d7e428-4a5b-4f7e-bc7d-b761ca018922",
"title": "Websites",
"questions": [
{
id: 'dee6e3a6-f207-f3db-921e-32a0b745557',
text: 'Website questions',
items: Array(11)
}
]
},
{
"id": "79e42d88-7dd0-4f70-b6b4-dea4b4a64ef3",
"title": "Blogs",
"questions": [
...
]
},
{
"id": "439ded88-d7ed0-de70-b6b4-dea4b4a64e840",
"title": "App questions",
"questions": [
...
]
}
]
}
我想替换原始对象或其副本中的问题数组。
const newMenu = [
{id: '34bb96c7-1eda-4f10-8acf-e6486296f4dd', text: 'Website questions', items: Array(24)},
{id: '520c2d3f-6117-4f6a-904f-2477e3347472', text: 'Blog questions', item: Array(7)},
{id: '302b658a-9d8c-4f53-80f6-3f2275bfble', title: 'App questions', items: Array(14)}
]
我正在尝试通过其索引来执行此操作,但不幸的是它不起作用。
webSections.sections.forEach((item, index) => {
return webSections.sections[index].questions, newMenu[index]);
}
有人看到我哪里做错了吗?
传递给 forEach
的回调返回的值将不会在任何地方使用。
如果您想避免改变原始对象和更新问题,您可以使用 Array.prototype.map
和对象传播语法。
const object = {
"id": "a8df1653-238a-4f23-fe42-345c5d928b34",
"webSections": {
"id": "x58654a9-283b-4fa6-8466-3f7534783f8",
"sections": [
{
"id": "92d7e428-4a5b-4f7e-bc7d-b761ca018922",
"title": "Websites",
"questions": [
{
id: 'dee6e3a6-f207-f3db-921e-32a0b745557',
...
const updatedObject = {
...object,
webSections: {
...object.webSections,
sections: object.webSections.sections.map((section, index) => ({...section, questions: newMenu[index]}))
}
}
如果你只想改变原始对象
object.webSections.sections.forEach((_, index) => {
section.questions = newMenu[index]
})
const newSections = myObj.webSections.sections.map((obj, index) => {
const newQuestions = newItems[index];
return {
...obj,
questions: [newQuestions],
};
});
console.log(newSections);
MyObj 是主要对象。
这将生成新的部分数组,您可以将它与我想的主要对象组合...
@Ramesh Reddy 的回答最彻底。
如果您不关心突变,最简单的方法是:
myObject.webSections.sections.forEach((section, index) => {
section.questions = newMenu[index].items;
})
您使用的 'forEach' 语法错误。检查MDN它是如何使用的。
我一天中的大部分时间都在尝试替换现有嵌套对象的数组,但我不知道该怎么做。这是我的原始对象:
{
"id": "a8df1653-238a-4f23-fe42-345c5d928b34",
"webSections": {
"id": "x58654a9-283b-4fa6-8466-3f7534783f8",
"sections": [
{
"id": "92d7e428-4a5b-4f7e-bc7d-b761ca018922",
"title": "Websites",
"questions": [
{
id: 'dee6e3a6-f207-f3db-921e-32a0b745557',
text: 'Website questions',
items: Array(11)
}
]
},
{
"id": "79e42d88-7dd0-4f70-b6b4-dea4b4a64ef3",
"title": "Blogs",
"questions": [
...
]
},
{
"id": "439ded88-d7ed0-de70-b6b4-dea4b4a64e840",
"title": "App questions",
"questions": [
...
]
}
]
}
我想替换原始对象或其副本中的问题数组。
const newMenu = [
{id: '34bb96c7-1eda-4f10-8acf-e6486296f4dd', text: 'Website questions', items: Array(24)},
{id: '520c2d3f-6117-4f6a-904f-2477e3347472', text: 'Blog questions', item: Array(7)},
{id: '302b658a-9d8c-4f53-80f6-3f2275bfble', title: 'App questions', items: Array(14)}
]
我正在尝试通过其索引来执行此操作,但不幸的是它不起作用。
webSections.sections.forEach((item, index) => {
return webSections.sections[index].questions, newMenu[index]);
}
有人看到我哪里做错了吗?
传递给 forEach
的回调返回的值将不会在任何地方使用。
如果您想避免改变原始对象和更新问题,您可以使用 Array.prototype.map
和对象传播语法。
const object = {
"id": "a8df1653-238a-4f23-fe42-345c5d928b34",
"webSections": {
"id": "x58654a9-283b-4fa6-8466-3f7534783f8",
"sections": [
{
"id": "92d7e428-4a5b-4f7e-bc7d-b761ca018922",
"title": "Websites",
"questions": [
{
id: 'dee6e3a6-f207-f3db-921e-32a0b745557',
...
const updatedObject = {
...object,
webSections: {
...object.webSections,
sections: object.webSections.sections.map((section, index) => ({...section, questions: newMenu[index]}))
}
}
如果你只想改变原始对象
object.webSections.sections.forEach((_, index) => {
section.questions = newMenu[index]
})
const newSections = myObj.webSections.sections.map((obj, index) => {
const newQuestions = newItems[index];
return {
...obj,
questions: [newQuestions],
};
});
console.log(newSections);
MyObj 是主要对象。 这将生成新的部分数组,您可以将它与我想的主要对象组合...
@Ramesh Reddy 的回答最彻底。
如果您不关心突变,最简单的方法是:
myObject.webSections.sections.forEach((section, index) => {
section.questions = newMenu[index].items;
})
您使用的 'forEach' 语法错误。检查MDN它是如何使用的。