Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找最近的数组索引以进行精确计算_Javascript_Arrays - Fatal编程技术网

Javascript 查找最近的数组索引以进行精确计算

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/? 但获取所述日期

我在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 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
    数组中检索项目
注:最小偏移量实际上为“2020-01-02”-“2019-12-31”=2天偏移量,而“2020-12-27”-“2019-12-31”=4天偏移量。我想你的逻辑是,不包括你选择的日期之前的任何日子

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),请给出两个输入和预期输出示例。解释不清楚,有点复杂。我无法编辑我的帖子。试一试后,任何人都可以帮助编辑。我得到了它并修改了我的原始代码很好,很高兴听到我的回答帮助解决了这个问题。