【问题标题】:What is the best way to find the proper dynamic path resource into an array of resources?在资源数组中找到正确的动态路径资源的最佳方法是什么?
【发布时间】:2021-09-19 11:04:22
【问题描述】:

我有以下资源数组,包括一个动态资源(“guides/:guideId/packages”)和一个 currentURL(guides/GUIDE007/packages):

const resources = ["guides", "guides/files", "guides/:guideId/packages"];
const currentURL = "guides/GUIDE007/packages";

const getResourceMatch = (resources, currentURL) => { return ... ?? }  

const resourceMatch = getResourceMatch(resources, currentURL);
console.log(resourceMatch) // guides/:guideId/packages

当 currentURL 匹配资源或资源格式时,将格式匹配到数组中的最佳方法是什么?

【问题讨论】:

  • 您能否举个例子说明您正在尝试编写的函数,以便我们可以看到您想要的输入和输出?
  • 一个函数,它获取资源数组和 currentURL,然后在这种情况下返回 guides/:guideId/packages 项,因为该 URL 匹配动态格式 ``` const resources = ["guides", "guides/ files", "guides/:guideId/packages"] const currentURL = "guides/GUIDE007/packages" const resourceMatch = (resources, currentURL) => { return ... } console.log(resourceMatch) // guides/:guideId/packages ```谢谢@Ace
  • 编辑以获得更好的代码格式
  • 我提供了一个答案,如果它回答了您的问题,请将其标记为已回答,以便其他人知道它有效。

标签: javascript arrays url dynamic path


【解决方案1】:

我会先说你可能应该尝试找到一个可以为你进行路由匹配的库。不过,这里有一个路由匹配实现,可以将资源字符串转换为正则表达式来测试 currentURL。

const resources = ["guides", "guides/files", "guides/:guideId/packages", "guides/packages/:packageId"];
const currentURL1 = "guides/GUIDE007/packages";
const currentURL2 = "guides/packages/PKG007";

const getResourceMatch = (resources, currentURL) => {
  return resources.find(r => {
    const regexStr = '^' + r.replace(/(:\w+)/g,'[\\w-]+') + '$';
    const regex = new RegExp(regexStr);
    return regex.test(currentURL);
  })
}  

const resourceMatch1 = getResourceMatch(resources, currentURL1);
const resourceMatch2 = getResourceMatch(resources, currentURL2);

console.log(resourceMatch1) // guides/:guideId/packages
console.log(resourceMatch2) // guides/packages/:packageId

【讨论】:

  • 我想知道如果数组中有一个新的动态路径,我应该如何更改正则表达式,例如:guides/packages/:packageId?当前的正则表达式似乎不适用于这条新路径......有没有办法添加一个适用于最后一个/位置的动态的正则表达式?
  • @LeonardoUribe 我已经编辑了我的答案以表明它也应该适用于该路径。你确定你的网址看起来像你期望的那样吗?
  • 请注意:如果您有 packageIdpackages,它将匹配第一个路径。那里也不应该有guideId 吗?否则,您应该从该路径中删除 guides
猜你喜欢
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多