Lodash. Получить объект по свойству

120
22 августа 2019, 19:40

Хочу получить объект из массива объектов по указанному свойству. Массив - это route map. Все прекрасно, но если в конце свойства есть цифры, которые могут динамически меняться, то все ломается

const arr = [
  {url: '/team/:teamId([0-9]+)', name: 'Some name'},
  {url: '/home', name: 'Some name 12'}
];

Функция для получения

getPageName = url => _.find(arr, ['url', url]).name;

Может кто-то знает, как учесть динамически меняющиеся цифры? Пример url'ов: /team/3 /team/120

Затеял все это, чтоб получать название страницы при попадании на нее..

Home страницу получить не составляет труда, как вы уже поняли, а вот Team page - нет.

Answer 1

Можно попробовать что-то вроде такого.

const arr = [{ 
    url: '/team/:teamId([0-9]+)', 
    name: 'Some name' 
  }, 
  { 
    url: '/team/:teamId([0-9]+)/:playerId([a-c]{3})', 
    name: 'Some name' 
  }, 
  { 
    url: '/home', 
    name: 'Some name 12' 
  } 
]; 
 
function getRoute(arr, url) { 
 
  const getRegExp = (urlRoute) => { 
    const regexp = /[:].+\((.*)\)/; 
    const paths = urlRoute.split('/').map(m => { 
      const res = regexp.exec(m); 
      return res ? m.replace(res[0], res[1]) : m; 
    }); 
    return paths.join('/') + '$'; 
  } 
 
  return arr.find(el => { 
    const regexp = getRegExp(el.url); 
    if (regexp) { 
      return (new RegExp(regexp)).test(url); 
    } else { 
      return el.url === url; 
    } 
  }); 
} 
console.log(getRoute(arr, '/team/2')); 
console.log(getRoute(arr, '/team/2/aaa'));

READ ALSO
Обновить значения элемента массива

Обновить значения элемента массива

Столкнулся с ошибкой при обновлении значенияПередаю значения, но стейт не обновляется

111
Можно ли посмотреть буфер обмена на JS?

Можно ли посмотреть буфер обмена на JS?

Задача суть задачи довольно простаНа сайте есть input, посетитель ставит в него курсор и потом нажимает Ctrl+V

87
Не правильное тело запроса axios.post

Не правильное тело запроса axios.post

Есть сервер на котором хранится база данныхЧерез постман делаю POST и в body указываю тип данных json, делаю запись типа "name":"John", "password":"123"и все нормально,...

93
Эмуляция timeout при получении файла

Эмуляция timeout при получении файла

Хотелось бы проверить правильность отработки ошибки timeout при загрузке по XHR файлаВ Chrome можно задать скорость загрузки/отдачи документа

84