При всех значениях tp нужные поддиапазоны выводятся правильно, кроме участков, где отсутствует левый или правый поддиапазон. То есть, вначале, на участке 0, 1, 2, 3 и в конце, на участке 45, 47, 48. При попадении tp на эти участки появляется undefined или null, что выводит Uncaught TypeError. Как можно скорректировать представленный код JS, чтобы не выходила ошибка и расчёт продолжался.
const func = (ms, mo, tr) => {
const mso = ms.concat(mo).sort((a,b)=>a-b)
let paired = [], dl = null, dp = null, index = null;
for(let i = 0; i < mso.length; i += 2){
paired.push([mso[i], mso[i +1]])
}
const dd = paired.filter(item => ((ms.includes(item[0]) && ms.includes(item[1]))
|| (mo.includes(item[0]) && mo.includes(item[1])) ))
for(let i = 0; i < dd.length; i++){
if(tr > dd[i][1]){
dl = dd[i]
}
if(dd[i][0] < tr){
dp = dd[i + 1]
}
}
return [dl, dp]
}
console.log( func ( [2, 8, 13, 15, 19, 27, 33, 36, 43, 46], [0, 4, 6, 11, 17, 21, 25, 31, 38, 41, 45, 48], 17 ) );
console.log( func ( [2, 8, 13, 15, 19, 27, 33, 36, 43, 46], [0, 4, 6, 11, 17, 21, 25, 31, 38, 41, 45, 48], 23 ));
console.log( func ( [2, 8, 13, 15, 19, 27, 33, 36, 43, 46], [0, 4, 6, 11, 17, 21, 25, 31, 38, 41, 45, 48], 21 ));
console.log( func ( [2, 8, 13, 15, 19, 27, 33, 36, 43, 46], [0, 4, 6, 11, 17, 21, 25, 31, 38, 41, 45, 48], 37 ));