数据格式转换(二)

数据格式:

{
  rows:  [
    ["Lisa", 16, "Female", "2000-12-01"],
    ["Bob", 22, "Male", "1996-01-21"]
  ],
  metaData: [{
    name: "name",
    note: ''
  }, {
    name: "age",
    note: ''
  }, {
    name: "gender",
    note: ''
  }, {
    name: "birthday",
    note: ''
  }]
}

目标格式:

[{
  name: "Lisa",
  age: 16,
  gender: "Female",
  birthday: "2000-12-01"
}, {
  name: "Bob",
  age: 22,
  gender: "Male",
  birthday: "1996-01-21"
}]

原数据可以转化为:

let data = []
metaData.forEach(item => {
  data.push(item.name)
})
console.log(data) // ['name', 'age', 'gender', 'birthday']

现在我们需要下面两个数组合并:

[["Lisa", 16, "Female", "2000-12-01"],["Bob", 22, "Male", "1996-01-21"]],
['name', 'age', 'gender', 'birthday']

合并方法:遍历 data 数组中的结果作为目标数组对象的 key,将 rows 数组中的值作为 value。

let target = []
data.forEach(item => {
  rows.forEach(item1 => {
    let data = Object.create(null)
    item1.forEach(item2 => {
      data[item] = item2
    })
    target.push(data)
  })
})

结果为:由于先遍历 data 数组,最后将结果 push 了 8(2乘以4)次。2表示 rows 外循环的次数, 4 表示 data 的次数。

[{
  "name": "2000-12-01"
}, {
  "name": "1996-01-21"
}, {
  "age": "2000-12-01"
}, {
  "age": "1996-01-21"
}, {
  "gender": "2000-12-01"
}, {
  "gender": "1996-01-21"
}, {
  "birthday": "2000-12-01"
}, {
  "birthday": "1996-01-21"
}]

合并方法:先遍历 rows 数组,再遍历 data 数组,同时将 data 下标于 rows 内层数组的下标相对应。

let target = []
rows.forEach(item1 => {
  let value = Object.create(null)
  item1.forEach((item2, index2) => {
    data.forEach((item, index) => {
      if(index2 === index) {
        value[item] = item2
      }
    })
  })
  target.push(value)
})

更新方法:

let target = []
rows.forEach(item1 => {
  let value = Object.create(null)
  item1.forEach((item2, index2) => {
    let key = tarData[index2]
    value[key] = item2
  })
  target.push(value)
})

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值