使用JavaScript查找数组中最接近的索引

3

我有以下函数:

(function(){
    function closest (num, arr) {
        var curr = arr[0];
        var diff = Math.abs (num - curr);
        for (var val = 0; val < arr.length; val++) {
            var newdiff = Math.abs (num - arr[val]);
            if (newdiff < diff) {
                diff = newdiff;
                curr = arr[val];
            }
        }
        return curr;
    }
    var _array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362],
        _number = 155;

    return closest (_number, _array);
})()

结果为162


在这个数组中,我要展示离结果最近的索引! 结果应该是数字4

2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3

这里有一个更直接的解决方案(不是最优的):

  1. 找到数字和数组中的数字之间的差异
  2. 在新的差异数组中找到最小值
  3. 现在找到该最小值的索引

var _array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362],
  _number = 155;

// closest index?

const diffArr = _array.map(x => Math.abs(_number - x));
const minNumber = Math.min(...diffArr);
const index = diffArr.findIndex(x => x === minNumber);

console.log('Result index', index);


2

您可以存储索引并返回该值。

function closest(num, arr) {
    var curr = arr[0],
        diff = Math.abs(num - curr),
        index = 0;

    for (var val = 0; val < arr.length; val++) {
        let newdiff = Math.abs(num - arr[val]);
        if (newdiff < diff) {
            diff = newdiff;
            curr = arr[val];
            index = val;
        }
    }
    return index;
}

var array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362],
    number = 155;

console.log(closest(number, array));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,