给定一个数,使用reduce找出数组中最接近元素的位置

该博客介绍了如何利用JavaScript的reduce方法来查找数组中与给定目标值最接近的元素。示例代码展示了当有相同最小差值时,如何找到最先出现或最后出现的值,并返回其索引和值。此外,还提供了一个用于找出数组中与给定数字最接近值的函数findDiffMinNum。

用reduce方法实现

如果有相同的最小值
a <= b 时会找到最先出现的值
a < b 时会找到最后出现的值
idx 目标值索引

var arrs = [
  0.55, 0.75, 1.1, 1.5, 2.2, 2.2, 3, 4, 5.5, 7.5, 11, 15, 18.5, 22, 30, 37, 45,
  55, 75, 90, 110,
];

function findDiffMinNum(arr, num) {
  let idx = 0;
  const min = arr.reduce((prev, current, index) => {
    const a = Math.abs(prev - num);
    const b = Math.abs(current - num);
    return a <= b ? (prev) : ((idx = index), current);
  }, 0);
  console.log('idx :>> ', idx, arr[idx], arr[idx + 1]);
  return min;
}
h = 2.2;
var diffMin = findDiffMinNum(arrs, h);
console.log('diffMin :>> ', diffMin);

其它实现 js数字和数组匹配获取最接近的值

<think>我们要在数组找出满足state=0的条件下,距离给定近的字。假设我们有一个数组,每个元素一个对象,包含 state和某个字属性(比如value)。给定一个目标字,我们需要在state为0的元素中,找到与目标接近的那个元素(即差值绝对值小)。如果有多个,可能需要返回其中一个(或者按照要求,比如返回第一个出现的,或者小的那个?这里我们通常返回第一个找到的符合条件的即可,或者如果有多个相同小距离,则取第一个遇到的)。步骤:1.过滤数组,只保留state等于0的元素。2.如果没有符合条件的元素,返回 null或undefined。3.遍历过滤后的数组,计算每个元素的value与目标字的绝对差值。4.记录小差值以及对应的元素。另一种方法是使用reduce。注意:可能存在多个元素具有相同的小差值,我们取第一个遇到的即可(或者也可以取一个,但通常取第一个)。但题目没有明确要求,我们就取第一个。示例数组:假设数组元素为 {state:0,value:5}, {state:1, value:10}, {state:0,value:8},目标字为7。那么过滤后得到两个元素:5和8。计算距离:|5-7|=2,|8-7|=1,所以近的是8。代码实现:</think>### 如何在 JavaScript找出数组中满足 `state=0` 且距离目标近的字 要实现这个功能,需要: 1. 过滤出 `state === 0` 的元素 2. 计算每个元素与目标字的绝对距离 3. 找出小距离对应的元素 ```javascript function findClosestWithState(arr, target) { // 1. 过滤有效元素 const validItems = arr.filter(item => item.state === 0); if (validItems.length === 0) return null; // 2. 计算小距离 let minDistance = Infinity; let closestItem = null; validItems.forEach(item => { const distance = Math.abs(item.value - target); if (distance < minDistance) { minDistance = distance; closestItem = item; } }); return closestItem.value; // 返回近的值 } // 示例用法 const data = [ { state: 0, value: 5 }, { state: 1, value: 8 }, { state: 0, value: 12 }, { state: 0, value: 3 } ]; console.log(findClosestWithState(data, 7)); // 输出: 5 (因为|5-7|=2小) console.log(findClosestWithState(data, 10)); // 输出: 12 ``` **关键点说明:** - 使用 `filter()` 筛选 `state=0` 的有效元素 - 通过 `Math.abs()` 计算绝对距离 - 遍历时动态更新小距离和对应元素 - 处理空数组情况(返回 `null`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值