为了账号安全,请及时绑定邮箱和手机立即绑定

如何动态构建嵌套对象

如何动态构建嵌套对象

HUH函数 2021-11-25 16:11:05
我正在从 api 获取数据,并希望以客户端可以读取的方式格式化数据。我已经尝试了以下代码来构建对象,但感觉很笨拙并且没有处理边缘情况。function myHackyFunction(data){result = {}data.forEach(el => {        const timeStamp = el['time']        result[timeStamp] = { teacher: null, student: null }    })data.forEach(el => {        const role = el['role']        const timeStamp = el['time']        const age = el['age']        if (role.includes('teacher')) {            result[timeStamp].teacher = age        }        if (role.includes('student')) {            result[timeStamp].student = age        }    })  return result}myHackyFunction(data)数据变量将有不同的长度,但总是相同的设置。有时它包括student和teacher角色,有时只是其中之一。这个数据..const data = [  {    time: 2019,    role: 'student',    age: 22  },  {    time: 2019,    role: 'teacher',    age: 37  },  {    time: 2020,    role: 'teacher',    age: 45  }]..应该是这样的:const desiredData = {  2019: {    student: 22,    teacher: 37  },  2020: {    student: null,    teacher: 45  }}
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

每当您看到看起来像您的分组等的数据时,Array.reduce通常都符合要求。


例如。


const data = [

  {

    time: 2019,

    role: 'student',

    age: 22

  },

  {

    time: 2019,

    role: 'teacher',

    age: 37

  },

  {

    time: 2020,

    role: 'teacher',

    age: 45

  }

];

//..should look like:


const desiredData = data.reduce((a, v) => {

  a[v.time] = a[v.time] || {student: null, teacher: null};

  a[v.time][v.role] = v.age;

  return a;

}, {});


console.log(desiredData);


查看完整回答
反对 回复 2021-11-25
?
狐的传说

TA贡献1804条经验 获得超3个赞

找到以下问题的解决方案:


console.clear()


const data = [

  {

    time: 2019,

    role: 'student',

    age: 22

  },

  {

    time: 2019,

    role: 'teacher',

    age: 37

  },

  {

    time: 2020,

    role: 'teacher',

    age: 45

  }

]


const m = {}

const len = data.length


for (let i = 0; i < len; ++i) {

    if (!m[data[i].time]) m[data[i].time] = {student: null, teacher: null}

  if (data[i].role === 'student')

    m[data[i].time].student = data[i].age

  else if (data[i].role === 'teacher')

    m[data[i].time].teacher = data[i].age 

}


console.log(m)


查看完整回答
反对 回复 2021-11-25
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信