js 数组中数据格式的转化

因项目需求,有一组数据需要前段自己进行转换。
原数据格式为`

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方法操作到数组中到元素如果是一个引用值到话,并对其进行修改到话是会影响到原数组到。
// 判断对象是否有某个属性  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值