数据源格式:
const sourceData = [
{ name: "张三", buy: "洗衣液", money: 18, time: 180 },
{ name: "张三", buy: "凝珠", money: 34, time: 173 },
{ name: "李四", buy: "洗衣液", money: 28, time: 160 },
{ name: "李四", buy: "凝珠", money: 12, time: 173 },
{ name: "李四", buy: "洗衣粉", money: 78, time: 173 },
{ name: "王五", buy: "洗衣粉", money: 38, time: 170 }
]
希望得到数据格式:
data = [
{ name: "张三", money0: 18, time0: 180, time1: 173, money1: 34, },
{ name: "李四", money0: 28, time0: 160, money1: 12, time1: 173, money2: 78, time2: 173 },
{ name: "王五", money2: 38, time2: 170}
]
数据处理:
const sourceData = [
{ name: "张三", buy: "洗衣液", money: 18, time: 180 },
{ name: "张三", buy: "凝珠", money: 34, time: 173 },
{ name: "李四", buy: "洗衣液", money: 28, time: 160 },
{ name: "李四", buy: "凝珠", money: 12, time: 173 },
{ name: "李四", buy: "洗衣粉", money: 78, time: 173 },
{ name: "王五", buy: "洗衣粉", money: 38, time: 170 }
]
// 根据这两个维度区分和命名
const name = ['张三', '李四', "王五",];
const buy = ['洗衣液', '凝珠', '洗衣粉'];
function tansData(sourceData, name, buy) {
//1.定一个二维数组的最外层
const dblAry = []
let temName = []
let temBuy = []
//2.遍历传过来的包含对象的大数组
var aIn = 0
for (let i = 0; i < sourceData.length; i++) {
let Ary = {}
if (temName.indexOf(sourceData[i].name) == -1) {
// 3.第一次出现的name,生成内部新对象Ary
temName.push(sourceData[i].name);
Ary["name"] = sourceData[i].name
if (temBuy.indexOf(sourceData[i].buy) == -1) {
// 4.第一次出现的给每一个name对应的对象,添加对应的money和time
let id = buy.findIndex(item => item == sourceData[i].buy)
console.log('id', id)
temBuy.push(sourceData[i].buy)
Ary["money" + id] = sourceData[i].money
Ary["time" + id] = sourceData[i].time
} else {
;
let id = buy.findIndex(item => item == sourceData[i].buy)
Ary["money" + id] = sourceData[i].money
Ary["time" + id] = sourceData[i].time
}
// 添加新对象到数组中
dblAry.push(Ary)
} else {
// 4.给不是第一次出现的,每一个name对应的对象,添加对应的money和time
let nameId = name.findIndex(item => item == sourceData[i].name)
if (temBuy.indexOf(sourceData[i].buy) == -1) {
let id = buy.findIndex(item => item == sourceData[i].buy)
console.log('id', id)
temBuy.push(sourceData[i].buy)
// 6.给对应的每对象添加money和time属性和值
dblAry[nameId]["money" + id] = sourceData[i].money;
dblAry[nameId]["time" + id] = sourceData[i].time;
} else {
let id = buy.findIndex(item => item == sourceData[i].buy)
dblAry[nameId]["money" + id] = sourceData[i].money;
dblAry[nameId]["time" + id] = sourceData[i].time;
}
}
}
return dblAry
}
console.log(tansData(sourceData, name, buy));