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

如何基于结果数组筛选主数组并获取相邻边界元素?

解决方案:动态筛选主数组并包含区间前后相邻元素

看起来你已经摸到了核心的区间筛选逻辑,只差一步——把区间在主数组里的前后相邻元素也纳入结果对吧?这里给你一个完全动态的解决方案,适配所有升序有序的主数组场景:

思路拆解

  1. 先正确计算结果数组的最小和最大值(注意Math.min()/Math.max()需要展开数组元素,不能直接传数组)
  2. 在主数组中定位区间的起始边界:如果区间最小值在主数组中有匹配项,就取它的前一个元素(如果存在);如果区间最小值比主数组第一个元素还小,就从第一个元素开始
  3. 定位区间的结束边界:如果区间最大值在主数组中有匹配项,就取它的后一个元素(如果存在);如果区间最大值比主数组最后一个元素还大,就到最后一个元素结束
  4. 截取主数组中从起始边界到结束边界的所有元素

代码实现

var master = [0,2,4,6,8,10];
var result = [4,5,6];

// 1. 计算结果数组的最小和最大值(用展开运算符处理数组参数)
const minResult = Math.min(...result);
const maxResult = Math.max(...result);

// 2. 找到主数组中第一个 >= 结果最小值的元素索引
let startIndex = master.findIndex(num => num >= minResult);
// 如果不是第一个元素,起始索引往前移一位
if (startIndex > 0) {
    startIndex--;
}

// 3. 找到主数组中最后一个 <= 结果最大值的元素索引
let endIndex = master.findLastIndex(num => num <= maxResult);
// 如果不是最后一个元素,结束索引往后移一位
if (endIndex < master.length - 1) {
    endIndex++;
}

// 4. 截取主数组得到最终结果(slice结束索引是排他的,所以要+1)
var finalmaster = master.slice(startIndex, endIndex + 1);

console.log(finalmaster); // 输出: [2,4,6,8]

边界情况测试

  • 若结果数组最小值小于主数组第一个元素:比如result = [-1, 2],最终会得到[0,2,4]
  • 若结果数组最大值大于主数组最后一个元素:比如result = [8, 12],最终会得到[6,8,10]
  • 若结果数组覆盖主数组全部范围:比如result = [0,10],最终结果还是完整的主数组

这个方案完全动态,不管主数组元素间隔是多少,只要是升序有序数组就能正常工作~

内容的提问来源于stack exchange,提问作者Niyaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:11:56