Посчитаем, сколько есть различных знаков разностей соседних элементов (текущий минус предыдущий). У монотонного массива если есть плюс, то нет минусов, и наоборот; возможно, присутствует ноль. У немонотонного есть и плюс, и минус, и тоже, возможно, ноль. Чтобы не путать случай
+/-
с
+/0
и
-/0
, будем считать, что ноль присутствует всегда - у нулевого элемента предыдущего нет, так что для него и запишем нулевую разность. Таким образом, монотонный массив - это такой, у которого неполный комплект различных знаков разностей соседних элементов:
const isMonotone = arr =>
arr.every(function(n, i, a) {
return this.add(i && Math.sign(n - a[i - 1])).size < 3;
}, new Set);