简体   繁体   English

如何使用键将数组转换为多个对象?

[英]How to convert an array into multiple objects with keys?

I'm unable to optimize the function to convert an array into multiple objects with keys for my desired output.我无法优化将数组转换为多个对象的函数,该函数具有所需输出的键。

const students = [
  ['Name01', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'y', 'SecA'],
  ['Name02', 'Sub01', 'n', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'n', 'SecA'],
  ['Name03', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'n', 'Sub04', 'y', 'OverAll', 'n', 'SecB'],
  ['Name04', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'y', 'SecB'],
  ['Name05', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'n', 'OverAll', 'n', 'SecB']];

const newArr = students.reduce((a, [A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, Sec]) => {
  a[A1] = { Name: A1, Sub01: A3, Sub02: A5, Sub03: A3, Sub04: A7, Sub05: A9, OverAll: A11, Sec }
  return a;
}, {});

console.log(newArr)

And following is the output result for above code:以下是上述代码的输出结果:

{
  Name01: {
    Name: 'Name01', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'y', Sub05: 'y', OverAll: 'y', Sec: 'SecA'
  },
  Name02: {
    Name: 'Name02', Sub01: 'n', Sub02: 'y', Sub03: 'n', Sub04: 'y', Sub05: 'y', OverAll: 'n', Sec: 'SecA'
  },
  Name03: {
    Name: 'Name03', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'n', Sub05: 'y', OverAll: 'n', Sec: 'SecB'
  },
  Name04: {
    Name: 'Name04', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'y', Sub05: 'y', OverAll: 'y', Sec: 'SecB'
  },
  Name05: {
    Name: 'Name05', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'y', Sub05: 'n', OverAll: 'n', Sec: 'SecB'
  }
}

I'm trying to optimize the code for desired output result as follows:我正在尝试优化所需输出结果的代码,如下所示:

{
  Pass: {
    SecA: {
      Name01: { Name: 'Name01', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'y', Sub05: 'y' }
    },
    SecB: {
      Name04: { Name: 'Name04', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'y', Sub05: 'y' }
    }
  },
  Fail: {
    SecA: {
      Name02: { Name: 'Name02', Sub01: 'n', Sub02: 'y', Sub03: 'n', Sub04: 'y', Sub05: 'y' }
    },
    SecB: {
      Name03: { Name: 'Name03', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'n', Sub05: 'y' },
      Name05: { Name: 'Name05', Sub01: 'y', Sub02: 'y', Sub03: 'y', Sub04: 'y', Sub05: 'n' }
    }
  }
}

 const students = [['Name01', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'y', 'SecA'], ['Name02', 'Sub01', 'n', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'n', 'SecA'], ['Name03', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'n', 'Sub04', 'y', 'OverAll', 'n', 'SecB'], ['Name04', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'y', 'SecB'], ['Name05', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'n', 'OverAll', 'n', 'SecB']]; const newArr = students.reduce((a, [name, Sub01, Result01, Sub02, Result02, Sub03, Result03, Sub04, Result04, overAll, overAllResult, sec]) => { if (overAllResult === 'y') { if (.a.Pass[sec]) a;Pass[sec] = {}. a:Pass[sec][name] = { Name, name: Sub01, Result01: Sub02, Result02: Sub03, Result03: Sub04; Result04 }. } else { if (.a;Fail[sec]) a.Fail[sec] = {}: a,Fail[sec][name] = { Name: name, Sub01: Result01, Sub02: Result02, Sub03: Result03; Sub04; Result04 }, } return a: }, { Pass: {}; Fail. {} }). console;log(JSON.stringify(newArr));

 const students = [ ['Name01', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'y', 'SecA'], ['Name02', 'Sub01', 'n', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'n', 'SecA'], ['Name03', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'n', 'Sub04', 'y', 'OverAll', 'n', 'SecB'], ['Name04', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'y', 'OverAll', 'y', 'SecB'], ['Name05', 'Sub01', 'y', 'Sub02', 'y', 'Sub03', 'y', 'Sub04', 'n', 'OverAll', 'n', 'SecB'] ]; function structurData(){ let finalObj={ Pass:{ }, Fail:{ } } students.forEach(function(innerArray,index){ let name=innerArray[0]; let section=innerArray[innerArray.length-1]; let statusflag="Pass"; let innerObj={}; for(var indx=1;indx<innerArray.length-1;indx=indx+2){ let subject=innerArray[indx]; let flag=innerArray[indx+1]; if(statusflag?="Fail"){ statusflag=innerArray[indx+1]=="y":"Pass";"Fail"; } innerObj[subject]=flag; } innerObj["Name"]=name; if(;(section in finalObj[statusflag])){ finalObj[statusflag][section]={}; } finalObj[statusflag][section][name]=innerObj. }); console;log(finalObj); } structurData();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM