因项目需求,有一组数据需要前段自己进行转换。
原数据格式为`
var projectArr = [
{
title: '万景成',
detail: [
{
name: '2018-10',
a: 100,
b: 200
},
{
name: '2018-09',
a: 600,
b: 700
}
]
},
{
title: '香港成',
detail: [
{
name: '2018-09',
a: 300,
b: 400
},
{
name: '2018-08',
a: 555,
b: 666
}
]
}
]
需要将其转化为
var monthArr = [
{
title: '2018-10',
detail: [
{
name: '万景成',
a: 100,
b: 200
}
]
},
{
title: '2018-09',
detail: [
{
name: '万景成',
a: 600,
b: 700
},
{
name: '香港成',
a: 300,
b: 400
}
]
},
{
title: '2018-08',
detail: [
{
name: '香港成',
a: 555,
b: 666
}
]
}
]
第一组数据是按Project展示,而转换后的数据是按Month进行展示。
const transferArrayStructure = function (arr, detail, title, name) {
let nArr = arr.map(item => {
return item[detail].map(value => {
value.tempName = item[title]
return value
})
})
let obj = {}
nArr.map(item => {
item.map(i => {
let key = i[name]
obj[key] = (key in obj) ? obj[key] : []
i[name] = i.tempName
delete i.tempName
obj[key].push(i)
})
})
let dataList = []
Object.keys(obj).map(item => {
let o = {}
o[title] = item
o[detail] = obj[item]
dataList.push(o)
})
return dataList
}
// 最近接触到map方法,发现是一个极好用到方法,便用map代替了原本到forEach或者for...in操作。
// map方法操作到数组中到元素如果是一个引用值到话,并对其进行修改到话是会影响到原数组到。
// 判断对象是否有某个属性