javascript - 映射对象内的数组

标签 javascript lodash

我有以下复杂的 JSON 对象,其中包含数组和数组内的数组。如何解析这些数组并为数组中的每个元素创建一个对象数组。我在我的项目中使用 lodash 库,以防万一有可用的功能。

   {
  studentId: 123
  name: XYZ
  phone: 34234234
  gender: M
  subjects: [{
     studentId: 123
     subjectName: Math
     scores:50
    assignments:[
     {
        type: Internal,
        submitted: yes,
        status: failed 
     },
     {
        type: External,
        submitted: yes,
        status: passed 
     }] 
},
{
     studentId: 123
     subjectName: Science
     score: 20
     assignments:[
     {
        type: Internal,
        submitted: yes,
        status: passed 
     },
     {
        type: External,
        submitted: yes,
        status: failed 
     }]
}] 

}

预期:

[{
  studentId:123,
  name: XYZ
  phone: 34234234
  gender: M,  
  subjectName: Math
  scores:50
  assignments:[
     {
        type: Internal,
        submitted: yes,
        status: failed 
     },
     {
        type: External,
        submitted: yes,
        status: passed 
     }]
},
{
 studentId:123,
  name: XYZ
  phone: 34234234
  gender: M,  
  subjectName: science
  scores:20
  assignments:[
     {
        type: Internal,
        submitted: yes,
        status: failed 
     },
     {
        type: External,
        submitted: yes,
        status: passed 
     }]
}
]

最佳答案

您可以使用omit要在没有 subjects 数组的情况下获取学生的详细信息,请使用这些details 来使用 defaults 转换主题数组中的每一项。通过map .

var details = _.omit(data, 'subjects');
var result = _.map(data.subjects, function(subject) {
  return _.defaults({}, details, subject);
});

var data = {
    studentId: '123',
    name: 'XYZ',
    phone: '34234234',
    gender: 'M',
    subjects: [{
        studentId: '123',
        subjectName: 'Math',
        scores: 50,
        assignments: [{
            type: 'Internal',
            submitted: 'yes',
            status: 'failed'
          },
          {
            type: 'External',
            submitted: 'yes',
            status: 'passed'
          }
        ]
      },
      {
        studentId: '123',
        subjectName: 'Science',
        score: 20,
        assignments: [{
            type: 'Internal',
            submitted: 'yes',
            status: 'passed'
          },
          {
            type: 'External',
            submitted: 'yes',
            status: 'failed'
          }
        ]
      }
    ]
};

var details = _.omit(data, 'subjects');
var result = _.map(data.subjects, function(subject) {
  return _.defaults({}, details, subject);
});

console.log(result);
body > div { min-height: 100%; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

关于javascript - 映射对象内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727211/

相关文章:

javascript - 如何禁用 vue 组件中的链接?

javascript - Lodash - 如何从嵌套的json中一次只选择一项?

javascript - 如果具有相同的 id,如何将数组对象值合并到数组

javascript - 为什么 iframe 这么慢?

javascript - 用于直播的网络音频 API?

javascript - lodash _.remove 不适用于对象内容

javascript - 如何在 VueJS 插值中为 undefined object 属性使用默认值?

javascript - 使用 lodash 或 vanilla javascript 计算数组内的对象属性

javascript - Angular Js $Resource 问题

javascript - 关于jquery slideDown的问题