Показать сообщение отдельно
  #12 (permalink)  
Старый 30.09.2022, 21:50
Аспирант
Отправить личное сообщение для IZUM Посмотреть профиль Найти все сообщения от IZUM
 
Регистрация: 21.08.2022
Сообщений: 57

При всех значениях 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  ));
Ответить с цитированием