JavaScript如何查找数组中最接近指定阈值的左侧最大数值
JavaScript实现小于阈值的最大数值查找函数
实现思路
- 首先校验阈值是否存在于目标数组中,存在则直接返回阈值
- 过滤出数组中所有小于阈值的元素
- 对过滤后的元素取最大值,即为最接近阈值的左侧数值,若过滤结果为空可返回null等自定义兜底值
完整代码
// 目标测试数组 let a = [5, 5, 9, 5, 6, 888, 98, 2, 6]; /** * 查找最接近阈值的左侧数值 * @param {Array} arr 目标数组 * @param {Number} threshold 阈值 * @returns 阈值存在则返回阈值,不存在返回小于阈值的最大值,无符合值返回null */ function findClosestLeft(arr, threshold) { // 阈值存在直接返回 if (arr.includes(threshold)) return threshold; // 过滤所有小于阈值的元素 const filtered = arr.filter(item => item < threshold); // 无符合条件元素返回兜底值 if (!filtered.length) return null; // 返回过滤数组的最大值 return Math.max(...filtered); } // 测试示例:阈值为999 console.log(findClosestLeft(a, 999)); // 输出888
原有代码问题说明
你给出的map方法是对数组每个元素做映射返回新数组,只能得到每个元素是否大于等于900的布尔值数组,无法直接得到目标结果,所以我们替换为filter过滤+Math.max取最大值的逻辑即可。
补充:如果你的使用场景下目标数组是已排序的,可改用二分查找实现,处理大数组时性能更优。
内容的提问来源于stack exchange,提问作者user7521964
相关产品推荐
相关产品推荐

