2800: {Date: '2022-01-14', Open: 514.48999, High: 522.570007, Low: 511.269989, Close: 520.599976, …}
2801: {Date: '2022-01-18', Open: 510.390015, High: 519.390015, Low: 504.980011, Close: 513.340027, …}
2802: {Date: '2022-01-19', Open: 516.47998, High: 528.919983, Low: 515.299988, Close: 516.580017, …}
2803: {Date: '2022-01-20', Open: 522.380005, High: 532.030029, Low: 509.640015, Close: 510.850006, …}
2804: {Date: '2022-01-21', Open: 508.5, High: 513.859985, Low: 499.269989, Close: 499.910004, …}
2805: {Date: '2022-01-24', Open: 491.070007, High: 520.429993, Low: 483.309998, Close: 519.659973, …}
2806: {Date: '2022-01-25', Open: 505.51001, High: 514.26001, Low: 500.01001, Close: 502.720001, …}
我有以下超過 10 年的 ADBE 歷史價格資料。我試圖根據他們的報告日期(每年 11 月結束的期間)每年獲取最小值和最大值。
我正在嘗試在陣列中獲取輸出:
[2010 min price, 2011 min price, 2012 min price ...]
const startDate = new Date("2010-12-01");
const endDate = new Date("2022-04-30");
const data2 = data.filter(a => {
const date = new Date(a.Date);
return (date >= startDate && date <= endDate);
});
console.log(data)
function findMinMax(key) {
const datas = data2.map((node) => node[key]);
return {
min: Math.min(...datas),
max: Math.max(...datas),
}
}
const checkit = findMinMax('Close')
根據代碼,我怎樣才能做到這一點而不必更改每年的開始和結束日期以獲得最小最大值?
uj5u.com熱心網友回復:
查看下面的解決方案,它根據報告月份計算所有欄位的最小值/最大值。
const data = [
{ Date: "2022-01-14", Open: 100, High: 500, Low: 50, Close: 1000 },
{ Date: "2021-12-05", Open: 200, High: 150, Low: 150, Close: 2000 },
{ Date: "2021-10-21", Open: 300, High: 550, Low: 70, Close: 200 },
{ Date: "2021-02-18", Open: 250, High: 600, Low: 10, Close: 500 },
];
const START_REPORTING_MONTH = 11; // 11 for December
const output = data.reduce((res, { Date: date, ...rest }) => {
const d = new Date(date);
const year = d.getFullYear();
const month = d.getMonth();
let reportingPeriod;
if (month >= START_REPORTING_MONTH) {
reportingPeriod = `${year}-${year 1}`;
} else {
reportingPeriod = `${year - 1}-${year}`;
}
if (!res[reportingPeriod]) {
res[reportingPeriod] = { min: { ...rest }, max: { ...rest } };
}
Object.entries(rest).forEach(([k, v]) => {
if (v < res[reportingPeriod].min[k]) {
res[reportingPeriod].min[k] = v;
}
if (v > res[reportingPeriod].max[k]) {
res[reportingPeriod].max[k] = v;
}
});
return res;
}, {});
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/469217.html
標籤:javascript 数组 循环 日期 最小值最大值
