我有一个 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 = 'a/b/c/5'; //or input = 'a/b/c/4';
foo(input,arr) // should return 1
同样
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
所以我希望 * 在搜索时成为通配符。 我在实现这个过程中遇到了很多困难,任何帮助将不胜感激。
最佳答案
将每个路径
转换为regular expression ,请注意通配符的正则表达式是 .*
而不是 *
。
根据您更新的问题,并假设通配符仅匹配数字,则正则表达式变为 [0-9]+
:
var arr = [{"path": "a/b/c/*","id": "1"},
{"path": "l/m/*/n","id": "2"},
{"path": "a/b/c/d/*","id": "3"}
];
function foo(input, arr) {
var i, RE;
for(i = 0 ; i < arr.length ; i++) { //iterate through the array
RE = new RegExp(arr[i].path.replace(/\*/g, '[0-9]+')); //convert path to regexp
if(RE.test(input)) { //test for a match
return arr[i].id;
}
}
}
console.log(foo('a/b/c/5', arr));
console.log(foo('l/m/78/n', arr));
console.log(foo('a/b/c/d/1', arr));
关于javascript - 在数组中搜索 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38221562/