数组javascript中的搜索

数组javascript中的搜索,javascript,arrays,json,regex,Javascript,Arrays,Json,Regex,我有一个json数组: var arr = [ { "path": "a/b/c/*", "id": "1" }, { "path": "l/m/*/n", "id": "2" }, { "path": "a/b/c/d/*", "id": "3" } ] 我想要与输入参数匹配的元素的id, 比如,如果我传递一个输入字符串和数组,我应该得到id foo(input,arr); 所以 同样地 var input = '

我有一个json数组:

var arr = 
 [
  {
    "path": "a/b/c/*",
    "id": "1"
  },
  {
    "path": "l/m/*/n",
    "id": "2"
  },
  {
    "path": "a/b/c/d/*",
    "id": "3"
  }
]
我想要与输入参数匹配的元素的id, 比如,如果我传递一个输入字符串和数组,我应该得到id

foo(input,arr);
所以

同样地

var input = 'l/m/78/n';
foo(input,arr); // should return 2
var input = 'a/b/c/d/1';
foo(input,arr); // should return 3
同样地

var input = 'l/m/78/n';
foo(input,arr); // should return 2
var input = 'a/b/c/d/1';
foo(input,arr); // should return 3
所以我想*成为搜索时的通配符。 在实现这一点的过程中,我付出了很多努力,我们将感谢您的帮助。

函数foo(输入,arr){
用于(arr中的var i){
var re=new RegExp(arr[i].path.replace(/\*/g,'.'.');
if(重新测试(输入)){
返回arr[i].id;
}
}
返回null;
}
var arr=
[
{
“路径”:“a/b/c/*”,
“id”:“1”
},
{
“路径”:“l/m/*/n”,
“id”:“2”
}
];
文件编写(foo(“l/m/1/n”,arr))
函数foo(输入,arr){
用于(arr中的var i){
var re=new RegExp(arr[i].path.replace(/\*/g,'.'.');
if(重新测试(输入)){
返回arr[i].id;
}
}
返回null;
}
var arr=
[
{
“路径”:“a/b/c/*”,
“id”:“1”
},
{
“路径”:“l/m/*/n”,
“id”:“2”
}
];

文件编写(foo(“l/m/1/n”,arr))
将每个
路径
转换为,注意通配符的正则表达式是
*
而不是
*

根据您更新的问题,并假设通配符只与数字匹配,正则表达式将变为
[0-9]+

var arr=[{“path”:“a/b/c/*”,“id”:“1”},
{“路径”:“l/m/*/n”,“id”:“2”},
{“路径”:“a/b/c/d/*”,“id”:“3”}
];
函数foo(输入,arr){
varⅠ,RE;
对于(i=0;i控制台日志(foo('a/b/c/d/1',arr))
将每个
路径
转换为,注意通配符的正则表达式是
*
而不是
*

根据您更新的问题,并假设通配符只与数字匹配,正则表达式将变为
[0-9]+

var arr=[{“path”:“a/b/c/*”,“id”:“1”},
{“路径”:“l/m/*/n”,“id”:“2”},
{“路径”:“a/b/c/d/*”,“id”:“3”}
];
函数foo(输入,arr){
varⅠ,RE;
对于(i=0;i控制台日志(foo('a/b/c/d/1',arr))这是一个无正则表达式的版本:

var-arr=[{
“路径”:“a/b/c/*”,
“id”:“1”
}, {
“路径”:“l/m/*/n”,
“id”:“2”
}
]
功能搜索(arr,输入){
input=input.split('/');
返回阵列过滤器(功能(el){
var value=el.path.replace('*','').split('/');
var通过=真;
对于(变量i=0;i控制台日志(搜索(arr,“l/m/78/n”)这是一个无正则表达式的版本:

var-arr=[{
“路径”:“a/b/c/*”,
“id”:“1”
}, {
“路径”:“l/m/*/n”,
“id”:“2”
}
]
功能搜索(arr,输入){
input=input.split('/');
返回阵列过滤器(功能(el){
var value=el.path.replace('*','').split('/');
var通过=真;
对于(变量i=0;i控制台日志(搜索(arr,“l/m/78/n”)非常感谢,这是一个很大的帮助。我错过了一个场景,只是对问题进行了更新,如果我通过a/b/c/d/1,解决方案将失败,其返回id=1,但应给出id=3。请更新答案,我将非常确定,完成。我的更新假定通配符仅用于数字。如果不是这样,请告诉我。是的,这很有帮助,实际上我在您的解决方案中添加了另一个检查,我比较了两边的斜杠数,如果相等,我会重新测试(inut)。非常感谢,这是一个很大的帮助。我错过了一个场景,只是对问题进行了更新,如果我通过a/b/c/d/1,解决方案将失败,返回id=1,但是如果给id=3,请你更新答案,我会非常确定,完成。我的更新假定通配符仅用于数字。如果不是这样,请告诉我。是的,这很有帮助,实际上我在您的解决方案中添加了另一个检查,我比较两边的斜杠数,如果相等,我会重新测试(inut)