console
const data1 = (() => {
const P = 1000000;
const r = 4.2 / 100 / 12;
const n = 30 * 12;
const M = P * r * Math.pow(1 + r, n) / (Math.pow(1 + r, n) - 1);
let remainingP = P;
const data = [];
for (let i = 1; i <= n; i++) {
const interest = remainingP * r;
const principal = M - interest;
remainingP -= principal;
data.push({ month: i, principal, interest });
}
return data;
})()
const data2 = (() => {
const P = 1000000;
const r = 4.2 / 100 / 12;
const n = 30 * 12;
let M = P * r * Math.pow(1 + r, n) / (Math.pow(1 + r, n) - 1);
let remainingP = P;
const data = [];
for (let i = 1; i <= n; i++) {
let interest = remainingP * r;
let principal = M - interest;
remainingP -= principal;
if (i === 24) {
remainingP -= 100000;
}
if (i >= 24) {
M = remainingP * r * Math.pow(1 + r, n - i) / (Math.pow(1 + r, n - i) - 1);
interest = remainingP * r;
principal = M - interest;
}
data.push({ month: i, principal, interest });
}
return data.slice(0, -1)
})()
const data3 = (() => {
const P = 1000000;
const r = 4.2 / 100 / 12;
const n = 30 * 12;
const M = P * r * Math.pow(1 + r, n) / (Math.pow(1 + r, n) - 1);
let remainingP = P;
const data = [];
for (let i = 1; i <= n; i++) {
const interest = remainingP * r;
const principal = M - interest;
remainingP -= principal;
if (i === 24) {
remainingP -= 100000;
}
if (remainingP <= 0) {
break;
}
data.push({ month: i, principal, interest });
}
return data;
})()
option = {
xAxis: {
type: 'category',
boundaryGap: false,
data: data1.map(item => item.month)
},
yAxis: {
type: 'value'
},
series: [
{
data: data1.map(item => item.principal),
type: 'line',
areaStyle: {}
},
{
data: data1.map(item => item.interest),
type: 'line',
areaStyle: {}
},
{
data: data3.map(item => item.principal),
type: 'line',
areaStyle: {}
},
{
data: data3.map(item => item.interest),
type: 'line',
areaStyle: {}
}
]
};
<div id="main"></div>
#main {
width: 200px;
height: 200px;
}