Я предполагаю, что вы хотите заменить аномалии 800
и 600
на 600
и 910
, поскольку они являются средними значениями двух соседних элементов в массиве. Вы можете решить это с помощью одной строки:
const input = [100, 190, 290, 395, 500, 800, 700, 800, 600, 1020];
input.map((val, i, arr) => [0, arr.length-1].includes(i) || (val-arr[i-1])*(val-arr[i+1]) <= 0 ? val : (arr[i-1] + arr[i+1])/2 )
// [ 100, 190, 290, 395, 500, 600, 800, 650, 910, 1020 ]
Краткое объяснение:
[0, arr.length-1].includes(i)
проверяет, является ли текущий элемент первым или последним в массиве (в котором в случае, если мы не можем сравнивать значения на обеих сторонах) и
(val-arr[i-1])*(val-arr[i+1]) <= 0
проверяет, находится ли число между двумя смежными элементами в массиве.