Javascript 如何获取和更新具有对象数组的复杂对象中的嵌套对象?
我手头有这个课程结构,但我不知道如何通过ID获取课程对象,以及如何使用修改的属性值更新课程对象 如果有人能照亮正确的道路,我们将不胜感激Javascript 如何获取和更新具有对象数组的复杂对象中的嵌套对象?,javascript,ecmascript-6,javascript-objects,Javascript,Ecmascript 6,Javascript Objects,我手头有这个课程结构,但我不知道如何通过ID获取课程对象,以及如何使用修改的属性值更新课程对象 如果有人能照亮正确的道路,我们将不胜感激 { id: 1, name: 'An Amazing Course', description: 'Mauris ac efficitur enim, nec commodo quam. Nunc vehicula blandit porta.', sections: [ { id: 1,
{
id: 1,
name: 'An Amazing Course',
description: 'Mauris ac efficitur enim, nec commodo quam. Nunc vehicula blandit porta.',
sections: [
{
id: 1,
sort_order: 1,
name: 'Section one',
lessons: [
{
id: 1,
sort_order: 1,
name: 'Lesson One'
},
{
id: 3,
sort_order: 2,
name: 'Lesson Three'
},
{
id: 2,
sort_order: 3,
name: 'Lesson Two'
}
]
},
{
id: 2,
sort_order: 2,
name: 'Section Two',
lessons: [
{
id: 4,
sort_order: 1,
name: 'Lesson Four'
},
{
id: 5,
sort_order: 2,
name: 'Lesson Five'
},
{
id: 6,
sort_order: 3,
name: 'Lesson Six'
}
]
}
]
}
您可以尝试使用类似的方法,将对象展平,以便在一个普通数组中学习所有课程。通过这种方式,您可以毫无问题地使用find/filter
使用稍微复杂一点的逻辑,您可以在平面课程数组中维护课程和课程的id引用
[].concat.apply([], Object.values(obj.sections).map(section =>
section.lessons.map(lesson => ({
...lesson,
courseId: obj.id,
sectionId: section.id
}))
))
此选项用于按id搜索课程
function findless(ids){
let result
const lesvalues=Object.values(les)
lesvalues.filter(x=>Array.isArray(x)?x.forEach(y=>y.lessons.find(x=>x.id==ids?result=x.name:null)):null)
return result
}
console.log(findless(3))
整个对象的关键点是什么?它是JSON还是那些花括号不应该在那里?@Daniel_Knights整个对象被包装在一个名为
course
的变量中。让课程={id:1,名称:'一个惊人的课程',…}哦,好的。例如,您可以执行课程。部分[0]。课程[0]。name=“新课程一”
非常感谢您的快速响应。当您展平数组时,它在更新lesson对象的属性时是否会丢失对名为obj
的原始对象的引用?按照我的方式,是的,您会丢失引用。但是您可以扩展内部映射的返回来添加这个引用。我添加了一个更复杂的片段来维护父引用。这正是我想要的。谢谢@al-hill
function findless(ids){
let result
const lesvalues=Object.values(les)
lesvalues.filter(x=>Array.isArray(x)?x.forEach(y=>y.lessons.find(x=>x.id==ids?result=x.name:null)):null)
return result
}
console.log(findless(3))