Google apps script GoogleApps脚本:根据另一个2D数组最近的时间戳过滤一个2D数组

Google apps script GoogleApps脚本:根据另一个2D数组最近的时间戳过滤一个2D数组,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有两个2D阵列;两者都包含时间戳和浮点值。Array1包含数百个时间戳值对,而Array2通常只包含约10个时间戳值对 我试图比较Array1和Array2,只想保留Array1的时间戳值对,以获得与Array2中的时间戳最接近的时间戳 Array1 = {[59.696, 2020-12-30T00:00:00.000Z], [61.381, 2020-12-30T00:15:00.000Z], [59.25, 2020-12-30T00:30:0

我有两个2D阵列;两者都包含时间戳和浮点值。Array1包含数百个时间戳值对,而Array2通常只包含约10个时间戳值对

我试图比较Array1和Array2,只想保留Array1的时间戳值对,以获得与Array2中的时间戳最接近的时间戳

Array1 = {[59.696, 2020-12-30T00:00:00.000Z], 
          [61.381, 2020-12-30T00:15:00.000Z], 
          [59.25, 2020-12-30T00:30:00.000Z],
          [57.313, 2020-12-30T00:45:00.000Z],...}

Array2 = {[78.210, 2020-12-30T00:06:00.000Z], 
          [116.32, 2020-12-30T00:39:00.000Z],...}
因此,在上面的这些数组示例中,我希望将数组1过滤为:

Array1 = {[59.696, 2020-12-30T00:00:00.000Z], 
          [57.313, 2020-12-30T00:45:00.000Z],...}
因为这些时间戳与Array2中的时间戳最匹配。 我曾尝试从中实现建议的代码,但无法使其正常工作,而且我无法找到时间戳匹配的简洁解决方案

非常感谢您的帮助。如果我需要编辑或添加更多信息,请告知我。

目标 给定两个数组:

Array1 = [
  [59.696, "2020-12-30T00:00:00.000Z"], 
  [61.381, "2020-12-30T00:15:00.000Z"], 
  [59.25, "2020-12-30T00:30:00.000Z"],
  [57.313, "2020-12-30T00:45:00.000Z"]
]

Array2 = [
  [78.210, "2020-12-30T00:06:00.000Z"],
  [116.32, "2020-12-30T00:39:00.000Z"]
]
目标是使
Array2
中的每个项目与
Array1
中最近的日期相匹配。因此,上面示例的结果数组将是2项。如果
Array2
有100个项目,而
Array1
有1000个项目,则生成的数组将有100个项目

我假设
Array1
中的每个项目只能使用一次。 我还假设数组中的第一项float值在计算中被忽略,但与日期保持在一起并包含在输出中

剧本
函数过滤器关闭时间(array1,array2){
//初始化“映射”以跟踪差异
//最近,将包含使用的最后一对
//差异,用于决定使用哪一对
//使用的位置是,使阵列1中的同一对
//不会被使用两次。
最近的=[]
差异=[]
位置使用=[]
//对于array2的每个成员
数组2.forEach((对,i)=>{
//初始化日期对象
targetDate=新日期(对[1])
//正在初始化当前索引在中的位置
//跟踪阵列。
最近的.推送(null)
差异推送(无限)
位置SUSED.push(空)
//遍历数组1的每个成员
数组1.forEach((子节,j)=>{
//首先检查该位置是否已被使用
如果(所用位置包括(j))返回
//初始化日期
dateToTest=新日期(子标题[1])
//检查当前测试日期之间的差异
//数组2的
差异=Math.abs(targetDate-dateToTest)
//检查是否是差异最小的日期
//如果是,请在跟踪阵列中设置位置。
//这些值可能会被多次覆盖,直到
//找到差异最小的日期。
如果(差异[i]>差异){
差别
最近的[i]=次空气
使用的位置[i]=j
}
})
})
返回最近的
}
功能测试(){
Logger.log(过滤器关闭时间(Array1,Array2))
}
运行
test
返回:

[“59.6962020-12-30T00:00:00.000Z”],[“57.313200-12-30T00:45:00.000Z”]
注 该算法涉及到检查一个数组中的每个元素和另一个数组中的几乎每个元素,因此速度可能会变慢。不过,如果您只处理数百个值,并与
Array2
中的~10进行比较,那么就可以了。请注意,这种方法具有O(n^2)时间复杂性。这意味着,随着比较次数的增加,完成操作所需的时间呈指数增长。如果你试着比较数万和数万,那么将会有一个明显的等待

工具书类