如何實現:合併陣列中ID相同的物件,並根據語言變數動態賦值
阿新 • • 發佈:2019-02-16
現有如下結構陣列,要求將具有相同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