在数组javascript中搜索

时间:2016-07-06 10:16:15

标签: 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 = '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

所以我希望*在搜索时成为通配符。 我在实施这个过程中遇到了很多困难,我们将不胜感激。

3 个答案:

答案 0 :(得分:3)

将每个path转换为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));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

&#13;
&#13;
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));
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这是一个正则表达式免费版本:

&#13;
&#13;
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'));
&#13;
&#13;
&#13;