如何在没有地图功能的Java脚本中合并两个对象的值?

问题描述 投票:-3回答:1

在下面的对象中,是否可以基于StudentID合并值?

样本输入:

{
  "moduleResults": [
    { 
      "StudentID": "00001480", 
       "ModuleCode": "MED3007-N", 
       "AcYear": "2018/9", 
       "Mark": "80", 
       "Grade": "A" 
     }, 
     { 
       "StudentID": "00001480", 
       "ModuleCode": "MED3020-N", 
       "AcYear": "2018/9", 
       "Mark": "82", 
       "Grade": "A" 
    }
  ]
}

我想要的输出是:

{ 
  "StudentID": "00001480", 
  "ModuleCode": ["MED3007-N","MED3020-N"], 
  "AcYear": "2018/9", 
  "Mark":["80","82"], 
  "Grade": ["A","A"] 
}
javascript json object d3.js
1个回答
0
投票

您可以在没有ES6的情况下这样做:

var src = {
  "moduleResults": [
    { 
      "StudentID": "00001480", 
       "ModuleCode": "MED3007-N", 
       "AcYear": "2018/9", 
       "Mark": "80", 
       "Grade": "A" 
     }, 
     { 
       "StudentID": "00001480", 
       "ModuleCode": "MED3020-N", 
       "AcYear": "2018/9", 
       "Mark": "82", 
       "Grade": "A" 
    }
  ]
}

var res = []
for (n = 0; n < src["moduleResults"].length; n++) {
  var srcEl = src["moduleResults"][n]
  var i = res.findIndex(el => el.StudentID === srcEl.StudentID)
  if (i === -1) { 
    res.push(srcEl) 
  } else {
    if (typeof res[i]["Mark"] !== "string") {
      res[i]["Mark"].push(srcEl["Mark"])
    } else {
      res[i]["Mark"] = [res[i]["Mark"], srcEl["Mark"]]	
    }
    if (Array.isArray(res[i]["Grade"])) {
      res[i]["Grade"].push(srcEl["Grade"])
    } else {
      res[i]["Grade"] = [res[i]["Grade"], srcEl["Grade"]]	
    }
  }
}
console.log(res)
© www.soinside.com 2019 - 2024. All rights reserved.