highcharts 将两个(momentJs)日期数组之间的相似(momentJs)日期匹配到一个新数组中

qcuzuvrc  于 2022-11-10  发布在  Highcharts
关注(0)|答案(1)|浏览(160)

简而言之:我在firstDateList中寻找所有在某个阈值(从秒到分钟不等)内与secondDateList中的日期匹配的日期(感谢@gloo的评论)。
我正在努力弄清楚看起来像是两个日期列表的一些基本的东西(我使用momentjs)。(这是为了在highcharts图表上显示特定的点)。
我必须检查每个第一个日期,并找到与第二个日期列表匹配的日期。问题是,我可以得到彼此***相似***的日期,所以它们可能会有一点偏差(以前只需要得到确切的(isSame)日期,但现在不起作用,因为有些日期会有几秒到几分钟的偏差)。
我正在检查两者之间的差异,但我不完全理解***仅***获得我需要的日期。
现在,它返回“secondDateList”中第一个日期之前的每个点(抱歉,命名有点混乱)

如何仅获取两个列表中匹配(最接近)的日期?

我对两个数组都使用forEach是正确的吗?我不完全知道如何只将***相似的***日期推到一个新数组中。
我想我应该在第一个数组中过滤,这样我就可以返回与我想要的日期匹配的新数组了?我不再太确定了。

const closestDatePoints: GraphPoint[] = [];
let closestPointDifference: number | null = null;

firstDateList?.forEach((firstDate, index) => {
  const formattedFirstDate = moment(firstDate[0]); // this just gets the date from this firstDate object

  secondDateList?.forEach((secondDate, index) => {
    // const isSame = date.isSame(formattedFirstDate);

    const differenceInMinutes = Math.abs(
      moment(secondDate)?.diff(formattedFirstDate, 'minutes')
    );

    if (
      closestPointDifference === null ||
      closestPointDifference > differenceInMinutes
    ) {
      closestPointDifference = differenceInMinutes;

      // I realize that this is pushing dates that I also do not 
      // want - its pushing all dates until the first, firstDate, and 
      // stopping once it hits that first firstDate. Don't know how 
      // to make it return***only***the dates I need.
      closestDatePoints.push(firstDate);
    }

  });
});
hgtggwj0

hgtggwj01#

这个问题类似于求两个数组的交集,只是值可以在阈值范围内,而不是严格相等。下面是一个非常简单的方法:

const closestDates = firstDateList.filter((date1) =>
    secondDateList.some((date2) => Math.abs(date1.diff(date2)) < threshold)
  );

我还没有能够在真实的日期上测试它,这远远不是最快的方法,所以我不确定它是否适合你的情况,但是对于小数组来说,这是非常可读的。
如果您需要更快的性能,则需要首先确保对两个数组进行排序,以防止进行一些冗余比较

相关问题