Как найти большее и меньшее число от текущего в массиве?
const currentData = 5.09 // текущее число const allDataMonth = [1.01, 1.01, 2.2, 5.07, 5.1, 9.9] // массив, в котором нужно найти большее и меньшее число от currentData По идее должно вернуться 5.07 как меньшее от currentData и 5.1 как большее от currentData. Пробую так: const closestRight = Math.min(...allDataMonth.filter(v => v > currentData)); const closestLeft = Math.max(...allDataMonth.filter(v => v < currentData)); Но это не работает как нужно: возвращяется просто самое большее и меньшее в массиве. |
дай определение для "самое большее от N" и для меньшего тоже
|
Цитата:
|
отсортировать
получить текущий индекс вычеслить индекс справа и слева |
Цитата:
|
CryNet,
const currentData = 5.09 // текущее число const allDataMonth = [1.01, 1.01, 2.2, 5.07, 5.1, 9.9] // массив, в котором нужно найти большее и меньшее число от currentData const closestRight = allDataMonth.find(v => v > currentData); const closestLeft = [...allDataMonth].reverse().find(v => v < currentData); alert([closestLeft,closestRight]); |
Цитата:
const currentData = 5.09 const allDataMonth = [1.01, 1.01, 2.2, 5.07, 5.1, 9.9] const closestRight = Math.min(...allDataMonth.filter(v => v > currentData)); const closestLeft = Math.max(...allDataMonth.filter(v => v < currentData)); alert(closestLeft+' '+closestRight) |
а массив отсортированный? или только в примере так?
|
Цитата:
Цитата:
Всем спасибо. |
Здесь достаточного одного прохода простого цикла:
let left = right = null; for(let i=0; i<allDataMonth.length; ++ i) { if(allDataMonth[i] < currentData && (left==null || left < allDataMonth[i])) left = allDataMonth[i]; if(allDataMonth[i] > currentData && (right==null || right > allDataMonth[i])) right = allDataMonth[i]; } |
Часовой пояс GMT +3, время: 15:54. |