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

使用Lodash获取对象数组中id属性的最近后续值

解法:根据给定整数查找id最近的后续对象

这问题其实挺常见的,我给你整理几种实用的解法,你可以根据自己的场景来选择:

前提:确保数组按id升序排列

不管用哪种方法,首先得保证数组是按id从小到大排序的(如果你的原始数组已经是有序的,这一步可以省略)。排序的代码很简单:

const sortedArray = [...array].sort((a, b) => a.id - b.id);

这里用扩展运算符[...array]是为了不修改原始数组,如果你不需要保留原数组,直接排序原数组也可以。


方法1:遍历查找(简单直观,适合小数组)

这是最容易理解的方式,遍历排序后的数组,找到第一个id大于给定整数x的对象就行——因为数组是升序的,第一个满足条件的就是你要找的「最近的后续对象」。

function findNextObject(array, x) {
  const sortedArray = [...array].sort((a, b) => a.id - b.id);
  for (const obj of sortedArray) {
    if (obj.id > x) {
      return obj;
    }
  }
  // 如果x比所有id都大,这里可以返回null或者最后一个对象,按需调整
  return null;
}

比如你的示例:

  • 当x=12(10<x<=15),遍历到{id:4}(不满足)→ {id:10}(不满足)→ {id:15}(满足),直接返回这个对象,完全符合你的需求。

方法2:用Array.find()简化代码

本质和遍历法逻辑一样,只是用数组的find方法让代码更简洁:

function findNextObject(array, x) {
  const sortedArray = [...array].sort((a, b) => a.id - b.id);
  // find会返回第一个满足条件的元素,找不到则返回undefined,这里用|| null处理
  return sortedArray.find(obj => obj.id > x) || null;
}

这个写法更简洁,适合追求代码简洁性的场景。


方法3:二分查找(高效,适合大数据量)

如果你的数组元素很多(比如上千个),遍历的效率就会有点低,这时候可以用二分查找,时间复杂度是O(logn),比遍历的O(n)快很多:

function findNextObject(array, x) {
  const sortedArray = [...array].sort((a, b) => a.id - b.id);
  let left = 0;
  let right = sortedArray.length - 1;
  let result = null;
  
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (sortedArray[mid].id > x) {
      // 当前元素符合条件,记录下来,继续往左找有没有更小的符合条件的id
      result = sortedArray[mid];
      right = mid - 1;
    } else {
      // 当前元素id <=x,往右找更大的id
      left = mid + 1;
    }
  }
  
  return result;
}

这个方法通过不断缩小查找范围,快速定位到目标对象,大数据量下优势明显。


额外注意点

  • 如果你的原始数组已经是按id升序排列的,记得去掉排序步骤,能提升不少性能;
  • 如果x比数组中所有id都大,你可以根据业务需求调整返回值:比如返回最后一个对象,或者返回null;
  • 你提到每个对象的id互不关联(也就是id唯一),所以不用考虑多个相同id的情况,以上方法都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:27