数据格式:
{
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)
})