首页 > 解决方案 > 从数组中查找最近的时间

问题描述

我有一个看起来像这样的对象数组

var OGArray = [
 { time: '16:33:53', import_today: '1.10' },
 { time: '16:28:20', import_today: '1.10' },
 { time: '16:23:07', import_today: '1.10' }]

时间自动从 API 更新。我也有一个看起来像这样的数组

var timeArray = ['16:00:00', '16:30:00', '17:00:00', '17:30:00']

我希望能够查看 timeArray[0] 并从 OGArray.time 中找到最接近的时间匹配,然后提取 import_today 是什么

标签: javascriptdate

解决方案


这只是一个循环,您可以计算更接近的时间并存储它。选择较少的那个。

下面不是最有效的代码,但它可以工作。

var OGArray = [
 { time: '16:33:53', import_today: '1.10' },
 { time: '16:28:20', import_today: '1.10' },
 { time: '16:23:07', import_today: '1.10' }]

var timeArray = ['16:00:00', '16:30:00', '17:00:00', '17:30:00']

var closestArray = timeArray.map(t => {
  const ts = new Date(`01/01/2022 ${t}`);
  return OGArray.reduce((closest, item) => {
    const dC = Math.abs(new Date(`01/01/2022 ${closest.time}`) - ts);
    const dI = Math.abs(new Date(`01/01/2022 ${item.time}`) - ts);
    return dC < dI ? closest : item;
  });
})

console.log(closestArray);


推荐阅读