繁体   English   中英

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

[英]Check if two URL strings are equal

我正在构建一个函数来处理动态电话号码交换、识别referral URL、映射数据集,然后输出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;
}, '');

我在使用hasPromo遇到了一些问题。 它现在的构建方式允许 promoUrl 有一些变化并且仍然有效,这意味着只要它包含从url返回的内容,它就可以工作,即/interior-doors//interior-doorsinterior-doors将全部工作,这很棒,但如果url/interior-do ,它也可以工作。 我需要它不这样做。 它应该独立于格式工作,但只有在字母字符串准确时才返回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 : '';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM