1. 程式人生 > >如何實現:合併陣列中ID相同的物件,並根據語言變數動態賦值

如何實現:合併陣列中ID相同的物件,並根據語言變數動態賦值

現有如下結構陣列,要求將具有相同lesson_id和number的物件合併,並更加lang欄位動態新增cname、ename鍵值
newData = [
{
"lesson_id": 56,
"lesson_name": "Adopt a Coaching Mindset",
"lang": 1,
"number": 1
},
{
"lesson_id": 56,
"lesson_name": "採用輔導式思維",
"lang": 2,
"number": 1
},
{
"lesson_id": 205,
"lesson_name": "Build a Coaching Habit",
"lang"
: 1, "number": 2 }, { "lesson_id": 205, "lesson_name": "培養輔導習慣", "lang": 2, "number": 2 } ]
// 以number為標識,如果沒有那麼在定義的物件中建立它
let newObj = {}
newData.forEach(function (element) {
   if (typeof newObj[element.number] === 'undefined') {
      newObj[element.number] = {
      id: element.lesson_id,
      cname: ''
, ename: '', number: element.number } } newObj[element.number][element.lang === 1 ? 'ename' : 'cname'] = element.lesson_name }, this) // 刪除空資料 for (let i = 0; i < newObj.length; i++) { if (newObj[i] === '' || typeof (newObj[i]) === 'undefined') { newObj.splice(i, 1) i = i - 1
} } // 提取有用資料儲存為陣列 let arr1 = [] for (let item in newObj) { let obj1 = { id: newObj[item].id, cname: newObj[item].cname, ename: newObj[item].ename } arr1.push(obj1) } return arr1