检查两个URL字符串是否相等

时间:2020-10-23 21:11:33

标签: javascript constants string-comparison

我正在构建一个功能来处理动态电话号码交换,识别[admin@ansible_client1 ~]$ cat /etc/passwd | grep Jim Jim:x:1004:1005::/home/Jim:/bin/bash [admin@ansible_client2 Jim]$ cat /etc/passwd | grep Jim Jim:x:1007:1008::/home/Jim:/bin/bash 网址,通过数据集进行映射,然后输出referral的相关电话号码。数据的格式如下:

promoUrl

该函数映射数据并减少数据,使我可以像这样对数据进行排序:

const phoneNumbers = [
  {
    promoUrl: '/interior-doors/',
    promoNumber: '589-918-0710',
  },
  {
    promoUrl: '/promo4/',
    promoNumber: '307-789-8615',
  },
];

我在const url = location.pathname.replace(/\/+$/, ''); const promoNumber = phoneNumbers.reduce((promoNumber, results) => { const hasPromo = results.promoUrl.includes(url); if (hasPromo) { return results.promoNumber; } return promoNumber; }, ''); 上遇到了一些问题。现在,它的构建方式允许promoUrl有所变化并仍然有效,这意味着只要它包含从hasPromo返回的内容,然后它就可以工作,即url/interior-doors//interior-doors都可以工作,这很好,但是如果interior-doorsurl,它也可以工作。我需要它不这样做。它应该独立于格式工作,但只有字母字符串正确时才返回/interior-do

我假设这是promoNumber,但我不知道我在regex那里做什么。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用==进行完全匹配。并且由于promoURL属性周围总是带有/,因此在设置url

时添加这些定界符
const url = '/' + location.pathname.replace(/\/+$/, '') + '/';

const promoNumber = phoneNumbers.reduce((promoNumber, results) => {
  const hasPromo = results.promoUrl == url;

  if (hasPromo) {
    return results.promoNumber;
  }
  return promoNumber;
}, '');

reduce似乎也是错误的功能。您只需要找到匹配的promoUrl,就不必继续进行归约,因为归约功能不会以任何方式合并结果。

const promo = phoneNumbers.find(({promoUrl}) => promoUrl == url);
const promoNumber = promo ? promo.promoNumber : '';