Учитывая templateURL и URL, как я могу получить поля в JavaScript? - PullRequest
0 голосов
/ 11 октября 2018
const templateURL = '/something/:key1/somethingelse/:key2';
const url = '/something/12/somethingelse/3';

Как я могу получить объект, подобный приведенному выше?

{
  key1: 12,
  key2: 3
}

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Вы можете использовать reduce с методом split.

const templateURL = '/something/:key1/somethingelse/:key2';
const url = '/something/12/somethingelse/3';

function f(temp, url) {
  temp = temp.split('/'), url = url.split('/');
  return temp.reduce((r, e, i) => {
    let [a, b] = e.split(':');
    if (b) r[b] = +url[i];
    return r;
  }, {})
}

console.log(f(templateURL, url))
0 голосов
/ 11 октября 2018

Предполагая, что обе строки имеют одинаковое количество частей, вы можете разделить обе части, и уменьшить URL.Для каждой части URL, проверьте соответствующую часть шаблона.Если он начинается с :, удалите из ключа : part String.substring(), а также его значение и значение для объекта.

const templateURL = '/something/:key1/somethingelse/:key2'
  .split('/');
  
const url = '/something/12/somethingelse/3';

const result = url.split('/')
  .reduce((r, s, i) => {
    const part = templateURL[i];
    
    if(part.startsWith(':')) {
      r[part.substring(1)] = isNaN(+s) ? s : +s;
    }
    
    return r;
  }, {});
  
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...