【问题标题】:Accessing nested array in a json访问json中的嵌套数组
【发布时间】:2019-12-05 03:25:30
【问题描述】:

让年龄 = 数据 .filter(isDog) .map(狗年) .reduce(sum);

毫升/小时

我想找到访问 javascript 对象中数组元素的最佳方式。 例如:我想找到每门课程的第一个教师姓名和第一个专业。

var students = 
{  
   deptartment:[  
      {  
         name:'Computer Science',
         age:20,
         Course:[  
            {  id: 100000
               name:'Object Oriented Programming',
               faculty:[  
                  {  
                     id:123,
                     name:'John',
                     Specialization: [
                       {name: 'science'},
                       {name: 'Physics'}
                     ]
                  }
                ]
            },
            {  id: 100001
               name:'C#',
               faculty:[    
                 {  
                     id:124,
                     name:'Denis', 
                     Specialization: [
                       {name: 'Ecnonomics'},
                       {name: 'Physics'}
                     ]
                  }
               ]
            }
         ],

      }
    ]
};

我知道我可以通过

获得学院名称和专业
  var courses= deptartment && deptartment.Course ;
    var facultyWithSpecialization= {};
    if(courses){
      courses.forEach(course =>{
        var fname = course.faculty && course.faculty[0].name;
        var s= course.faculty && course.faculty.Specialization;
        facultyWithSpecialization[fname] = s && s[0].name;
      })
    }

使用 Object.assign({}, deptartment.Course) 代替 department.Course

尝试使用以下代码,但没有太大区别。

 var courses=Object.values(Object.assign({}, deptartment.Course));
var fname = Object.values(Object.assign({}, course.faculty[0].Specialization[0]));

期待

'John': 'science'
'Denis': 'Ecnonomics'

【问题讨论】:

  • 这个问题没有JSON。
  • A.这是一个 JavaScript 对象。 JSON是字符串编码
  • B.您发布的问题充满了拼写错误,包括在代码中。这可能是你的问题
  • “我想要第一个教师姓名和每门课程的第一个专业” - 那为什么结果会包含Denis?这不是第一个教职员工的名字。你能澄清一下吗?
  • 学院名称和专业(第一)。

标签: javascript arrays json ecmascript-6 javascript-objects


【解决方案1】:

你可以试试这个。对象中有很多错误,包括拼写错误和格式错误

var students = {
  deptartment: [{
    name: 'Computer Science',
    age: 20,
    Course: [{
      id: 100000,
      name: 'Object Oriented Programming',
      faculty: [{
          id: 123,
          name: 'John',
          Specialization: [{
              name: 'science'
            },
            {
              name: 'Physics'
            }
          ]
        },
        {
          id: 124,
          name: 'Denis',
          Specialization: [{
              name: 'Ecnonomics'
            },
            {
              name: 'Physics'
            }
          ]
        }
      ]
    }],

  }]
}
var obj = {};
students.deptartment.forEach((e) => {
  e.Course.forEach((k) => {
    k.faculty.forEach((l) => {
      obj[l.name] = l.Specialization[0].name
    })
  })
})
console.log(obj)

【讨论】:

    【解决方案2】:

    我认为您的意思是 department 而不是 deptartment。 我修改了一点你的 JSON,因为它有点错误:

    var students = {  
       departments:[  
          {  
             name:'Computer Science',
             age:20,
             Courses:[  
                {  id: 100000,
                   name:'Object Oriented Programming',
                   faculty:[  
                      {  
                         id:123,
                         name:'John',
                         Specialization: [
                           {name: 'science'},
                           {name: 'Physics'}
                         ]
                      },
                     {  
                         id:124,
                         name:'Denis', 
                         Specialization: [
                           {name: 'Ecnonomics'},
                           {name: 'Physics'}
                         ]
                      }
                   ]
                }
             ],
          }]
    }
    

    你可以使用map来实现这个嵌套:

    students.departments.map(
      department => department.Courses.map(
        course => course.faculty.map(
          student => ({
            name: student.name,
            specialization: student.Specialization[0].name // check nulls here!
          })
        )
      )
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2015-10-25
      相关资源
      最近更新 更多