需求:让每一个list都有全部日期,但是原数据中没有chargeOffAmounts进行补0操作,日期顺序需一直,望解决..
以下为原数据
let arr = [
{
"name": "商户1",
"list": [
{
"chargeOffAmounts": 12,
"writeOffDate": "2023-02-27"
},
{
"chargeOffAmounts": 2,
"writeOffDate": "2023-03-06"
}
]
},
{
"name": "商户2",
"list": [
{
"chargeOffAmounts": 1,
"writeOffDate": "2023-03-05"
}
]
}
]
以下为所需要数据
let newArr=[
{
"name": "商户1",
"list": [
{
"chargeOffAmounts": 12,
"writeOffDate": "2023-02-27"
},
{
"chargeOffAmounts": 0,//原始数据没有需补0操作
"writeOffDate": "2023-03-05"
},
{
"chargeOffAmounts": 2,
"writeOffDate": "2023-03-06"
}
]
},
{
"name": "商户2",
"list": [
{
"chargeOffAmounts": 0,//原始数据没有需补0操作
"writeOffDate": "2023-02-27"
},
{
"chargeOffAmounts": 1,
"writeOffDate": "2023-03-05"
},
{
"chargeOffAmounts": 0,//原始数据没有需补0操作
"writeOffDate": "2023-03-06"
}
]
}
]
该回答引用chatgpt:测试可用
<script type="text/javascript">
let arr = [
{
"name": "商户1",
"list": [
{
"chargeOffAmounts": 12,
"writeOffDate": "2023-02-27"
},
{
"chargeOffAmounts": 2,
"writeOffDate": "2023-03-06"
}
]
},
{
"name": "商户2",
"list": [
{
"chargeOffAmounts": 1,
"writeOffDate": "2023-03-05"
}
]
}
];
// 获取所有日期列表
let dateList = Array.from(new Set(arr.flatMap(item => item.list.map(entry => entry.writeOffDate)))).sort();
// 补全日期和chargeOffAmounts字段
let newArr = arr.map(item => {
let newList = [];
dateList.forEach(date => {
let entry = item.list.find(obj => obj.writeOffDate === date);
if (entry) {
newList.push(entry);
} else {
newList.push({
chargeOffAmounts: 0,
writeOffDate: date
});
}
});
return {
name: item.name,
list: newList
};
});
console.log(newArr);</script>