如何把c数组形式的数据转换为a形式的数据?
let b = [{
createdAt: '2014-12-21 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 1`,
upgradeNum: 'Upgraded: 56',
data: {
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
}
}, {
createdAt: '2014-12-22 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 2`,
upgradeNum: 'Upgraded: 57',
data: {
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
}
}, {
createdAt: '2014-12-23 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 3`,
upgradeNum: 'Upgraded: 58',
data: {
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
}
}, {
createdAt: '2014-12-11 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 1`,
upgradeNum: 'Upgraded: 1',
data: {
name: 'bb',
platform: 'iOS2',
version: '10.3.4.5654',
upgradeNum: 600,
creator: 'Tom',
}
}, {
createdAt: '2014-12-22 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 2`,
upgradeNum: 'Upgraded: 2',
data: {
name: 'bb',
platform: 'iOS2',
version: '10.3.4.5654',
upgradeNum: 600,
creator: 'Tom',
}
}]
let c = [{
key:1,
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
children: [{
key:3,
createdAt: '2014-12-21 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 1`,
upgradeNum: 'Upgraded: 56',
}, {
key:4,
createdAt: '2014-12-22 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 2`,
upgradeNum: 'Upgraded: 57',
}, {
key:5,
createdAt: '2014-12-23 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 3`,
upgradeNum: 'Upgraded: 58',
}]
}, {
key:2,
name: 'bb',
platform: 'iOS2',
version: '10.3.4.5654',
upgradeNum: 600,
creator: 'Tom',
children: [{
key:6,
createdAt: '2014-12-11 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 1`,
upgradeNum: 'Upgraded: 1',
}, {
key:7,
createdAt: '2014-12-22 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 2`,
upgradeNum: 'Upgraded: 2',
}]
}]
上个回复的代码不行吗?json对象中同一个节点中不能出现2个一样的键名称,要不前面的值会被后面的覆盖。
name: This is production name 1
,这个最好换个键名称,比如proName
let b = [{
createdAt: '2014-12-21 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 1`,
upgradeNum: 'Upgraded: 56',
data: {
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
}
}, {
createdAt: '2014-12-22 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 2`,
upgradeNum: 'Upgraded: 57',
data: {
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
}
}, {
createdAt: '2014-12-23 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 3`,
upgradeNum: 'Upgraded: 58',
data: {
name: 'aa',
platform: 'iOS1',
version: '10.3.4.5654',
upgradeNum: 500,
creator: 'Jack',
}
}, {
createdAt: '2014-12-11 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 1`,
upgradeNum: 'Upgraded: 1',
data: {
name: 'bb',
platform: 'iOS2',
version: '10.3.4.5654',
upgradeNum: 600,
creator: 'Tom',
}
}, {
createdAt: '2014-12-22 23:12:00',
date: '2014-12-24 23:12:00',
name: `This is production name 2`,
upgradeNum: 'Upgraded: 2',
data: {
name: 'bb',
platform: 'iOS2',
version: '10.3.4.5654',
upgradeNum: 600,
creator: 'Tom',
}
}]
//==========下面为主要代码
let c = [];
let keys = Array.from(new Set(b.map(i => i.data.name)));
let subKeyStart = keys.length + 1;
keys.forEach((key,index) => {
let children = b.filter(i => i.data.name == key);
let cItem = { key: index + 1, ...children[0].data };
cItem.children = children.map(i => {
var item = { ...i, key: subKeyStart++ };
delete item.data;
return item;
})
c.push(cItem);
});
console.log(c);
代码如下:
let a=[];
c.forEach(i => {
let b=i.children;
b.forEach(j => {
let stemp=j;
stemp.children_name=j.name
stemp.name=i.name
stemp.data={name: i.name,platform: i.platform,version: i.version,upgradeNum: i.upgradeNum,creator: i.creator,}
a.push(stemp)
});
});
结果如下,要把c里面children的name: This is production name 1
转成children_name,要不然就会覆盖了: