如何提取数组中与上一选中元素间隔≥指定值的元素?
解决动态间隔筛选数组元素的思路
方法一:用Google Apps Script写自定义函数
这类需要跟踪上一个选中值的逻辑,用脚本循环处理最直接:
- 打开Google Sheets,点「扩展程序」→「Apps 脚本」
- 粘贴下面的代码:
function filterByDynamicGap(arr, gap) { if (!arr || arr.length === 0) return []; const result = [arr[0]]; let lastSelected = arr[0]; for (let i = 1; i < arr.length; i++) { if (arr[i] - lastSelected >= gap) { result.push(arr[i]); lastSelected = arr[i]; } } return result; }
- 保存脚本,回到表格,在单元格输入
=filterByDynamicGap(A1:A10, 0.25)(把A1:A10换成你的数据范围),就能得到符合要求的结果。
方法二:辅助列+迭代计算(不用写脚本)
如果不想碰脚本,用迭代计算传递状态也能实现:
- 先开迭代计算:点「文件」→「设置」→「计算」,勾选「启用迭代计算」,最大迭代次数设100就行(足够处理你的数据量)。
- 假设数据在A列(A1到A10),B1直接输入
=A1(第一个元素直接选)。 - B2输入公式:
=IF(A2 - B1 >= 0.25, A2, B1)
- 把B2的公式下拉到B10,此时B列会一直跟踪最新的选中元素。接下来提取所有选中的元素:
- C1输入
=IF(B1<>B2, B1, "") - C2输入
=IF(B2<>B3, B2, "") - 下拉C列到C10,最后用
=FILTER(C1:C10, C1:C10<>"")就能得到筛选后的列表。
- C1输入
原理:B列负责更新选中状态,当前元素满足间隔要求就替换成当前值,否则保持上一个选中值;C列则把B列里所有变化的节点(也就是每次选中的新元素)提取出来。
内容的提问来源于stack exchange,提问作者T J
相关产品推荐
相关产品推荐

