найти ближайший индекс массива в javascript - PullRequest
2 голосов
/ 02 февраля 2020

Пожалуйста, посмотрите на этот массив:

(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);
})()

Result is 162


Здравствуйте, В этом массиве я хочу показать ближайший индекс к результату! The result will be 4

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Вот более простое решение:

  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);
0 голосов
/ 02 февраля 2020

Вы можете сохранить индекс и вернуть это значение.

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));
...