[英]Search in array javascript
我有一個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
因此,我希望*在搜索時成為通配符。 在實施此功能時,我付出了很多努力,任何幫助將不勝感激。
將每個path
轉換為正則表達式 ,請注意,通配符的正則表達式是.*
而不是*
。
根據您更新的問題,並假設通配符應僅與數字匹配,則正則表達式變為[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));
function foo(input,arr){ for(var i in arr){ var re = new RegExp(arr[i].path.replace(/\\*/g, '.*')); if (re.test(input)) { return arr[i].id; } } return null; } var arr = [ { "path": "a/b/c/*", "id": "1" }, { "path": "l/m/*/n", "id": "2" } ]; document.write(foo("l/m/1/n",arr));
這是一個正則表達式免費版本:
var arr = [{ 'path' : 'a/b/c/*', 'id' : '1' }, { 'path' : 'l/m/*/n', 'id' : '2' } ] function search(arr, input) { input = input.split('/'); return arr.filter(function (el) { var value = el.path.replace('*', '').split('/'); var passed = true; for (var i = 0; i < value.length; i++) { if (input[i].length < 1 || value[i].length < 1 || input[i] == value[i]) {} else { passed = false; } } return passed; }) } console.log(search(arr, 'a/b/c/5')); console.log(search(arr, 'l/m/78/n'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.