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

Check if two URL strings are equal

我正在构建一个函数来处理动态 phone 号码交换,识别 referral url,通过数据集进行映射,然后输出 promoUrl 的相关 phone 号码。数据格式如下:

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;
}, '');

我在使用 hasPromo 时遇到了一些问题。它现在的构建方式允许 promoUrl 有一些差异并且仍然有效,这意味着只要它包含从 url 编辑的 return 然后它就可以工作,即 /interior-doors/, /interior-doorsinterior-doors 都可以,这很好,但如果 url/interior-do,它也可以。我需要它不要那样做。它应该独立于格式工作,但只有 return promoNumber 如果字母串是准确的。

我假设这是 regex 的事情,但我不知道我在用 regex 做什么。任何帮助将不胜感激。

使用==进行精确匹配。由于 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 : '';