Javascript 如何获取和更新具有对象数组的复杂对象中的嵌套对象?

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获取课程对象,以及如何使用修改的属性值更新课程对象

如果有人能照亮正确的道路,我们将不胜感激

{
   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))