Javascript 查找最近的数组索引以进行精确计算
我在Javascript中遇到了一个情况,我从具有类似提供者的2个端点得到了结果。我需要从finance API计算“市盈率”,但该API不提供检索值的功能,但有一个解决方法 特定年份的市盈率计算方法为: 所述日期的最后股价/每股收益日期 现在的问题是,如果我得到:Javascript 查找最近的数组索引以进行精确计算,javascript,arrays,Javascript,Arrays,我在Javascript中遇到了一个情况,我从具有类似提供者的2个端点得到了结果。我需要从finance API计算“市盈率”,但该API不提供检索值的功能,但有一个解决方法 特定年份的市盈率计算方法为: 所述日期的最后股价/每股收益日期 现在的问题是,如果我得到: let as-of-date = "2019-12-31"; let as-of-date-eps = 2.00; let ratio-as-of-date = as-of-date-eps/? 但获取所述日期
let as-of-date = "2019-12-31";
let as-of-date-eps = 2.00;
let ratio-as-of-date = as-of-date-eps/?
但获取所述日期最近股票价格的数组的结果将是
let stock-price-history = [
{
"date": "2019-12-26",
"open": 8.3,
"high": 8.48,
"low": 8.2,
"last": 8.21,
"volume": 162800
},
{
"date": "2019-12-27",
"open": 8.48,
"high": 8.48,
"low": 8,
"last": 8.19,
"volume": 113000
},
{
"date": "2020-01-02",
"open": 8.45,
"high": 8.48,
"low": 8.2,
"last": 8.4,
"volume": 100000
},
]
没有“2019-12-31”,但我想得到2019-12-31之前的股票价格历史指数。因此,这是第二个指数或股票价格历史[1]。最后一个完成精确计算。因此,我希望的预期市盈率为4.095
问题是如何编写代码以确保获得第二个结果。让我们保持简单:
- 计算每个项目的每个日期与所选日期之间的差值
- 将这些索引和差异/偏移保存到数组中
- 按偏移量排序
- 将此排序数组的第一个(零)索引(以及该数组的第一个,零索引)作为minIndex
- 使用此选项从
数组中检索项目stockPriceHistory
const chosenDate=新日期(“2019-12-31”);
常数股票价格历史=[
{
“日期”:“2019-12-26”,
“开放”:8.3,
“高”:8.48,
“低”:8.2,
“最后”:8.21,
“卷”:162800
},
{
“日期”:“2019-12-27”,
“开放”:8.48,
“高”:8.48,
“低”:8,
“最后”:8.19,
“数量”:113000
},
{
“日期”:“2020-01-02”,
“开放”:8.45,
“高”:8.48,
“低”:8.2,
“最后”:8.4,
“数量”:100000
},
];
const dateOffsetsByIndex=stockPriceHistory.map((项目,索引)=>{
const currDate=新日期(项目日期);
常量偏移=(currDate-chosenDate)/(1000*60*60*24);//天
返回[索引,偏移];
})
//按绝对偏移量排序:
//.sort((a,b)=>Math.abs(a[1])-Math.abs(b[1]);
//排序按偏移量排序,但将日期排在“最差”之前:
.排序((a,b)=>{
如果(a[1]>0&&b[1]<0){
返回1;
}
如果(a[1]<0&&b[1]>0){
返回-1;
}
返回Math.abs(a[1])-Math.abs(b[1])
});
//日志(dateOffsetsByIndex);
const minIndex=dateOffsetsByIndex[0][0];
console.log(股票价格历史[minIndex])代码>你的问题包含很多不相关的细节。如果要比较日期,可以使用许多库和大量资源(例如,moment.js),请给出两个输入和预期输出示例。解释不清楚,有点复杂。我无法编辑我的帖子。试一试后,任何人都可以帮助编辑。我得到了它并修改了我的原始代码很好,很高兴听到我的回答帮助解决了这个问题。