You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在含startTime、endTime的对象数组中查找距指定值最近的时间点及对应信息

实现代码

reduce 的累加器不需要保留上一个元素的时间属性,只需要记录全局最小差值、匹配的uid、匹配的字段即可,逻辑如下:

const dataStructure = [{
  uid: "123",
  startTime: 2,
  endTime: 6
}, {
  uid: "345",
  startTime: 9,
  endTime: 15
}]
const updatingTime = 6.7;

const matchResult = dataStructure.reduce((acc, curr) => {
  // 计算当前元素起止时间和目标值的绝对差值
  const startOffset = Math.abs(curr.startTime - updatingTime);
  const endOffset = Math.abs(curr.endTime - updatingTime);
  // 取当前元素的最小差值与对应字段
  const currMinOffset = Math.min(startOffset, endOffset);
  const currMatchField = startOffset < endOffset ? 'startTime' : 'endTime';
  // 小于全局最小差值则更新累加器
  if (currMinOffset < acc.minOffset) {
    return {
      minOffset: currMinOffset,
      uid: curr.uid,
      matchField: currMatchField
    }
  }
  return acc;
}, {
  minOffset: Infinity,
  uid: null,
  matchField: null
});

// 测试输出:{ minOffset: 0.7, uid: '123', matchField: 'endTime' }
console.log(matchResult);
特殊场景调整

如果出现差值完全相等的情况,可以自行调整匹配优先级:

  • 优先匹配startTime:将判断条件 startOffset < endOffset 改为 startOffset <= endOffset
  • 优先匹配endTime:保持原判断逻辑即可

内容的提问来源于stack exchange,提问作者Michael Joseph Aubry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 05:24:09