我有一个具有多个属性的对象,这些属性是正则表达式,例如:
let a = {
'/^\/a' : 'value 1',
'/^\/b' : 'value 2',
'/^\/d' : 'value 4',
}
获得与特定字符串匹配的属性之一的最佳方法是什么?
例如,如果尝试获取'/a'
应该返回我'value 1'
,而试图获取'/c'
应该返回undefined
。
答案 0 :(得分:2)
键/值对在这里并不是真正有用的,因为不能利用键:您可能需要先尝试 all 正则表达式,然后再找到匹配项(或不匹配)。因此,您不妨使用成对的数组。这还具有可以存储正则表达式对象的优点,而在该对象中则必须使用字符串表示形式。
这就是它的工作方式:
const regexes = [
[/^\/a/, 'value 1'],
[/^\/b/, 'value 2'],
[/^\/d/, 'value 4'],
];
function getValue(s) {
const i = regexes.findIndex(([regex]) => regex.test(s));
if (i > -1) return regexes[i][1];
}
console.log(getValue("/b"));
答案 1 :(得分:1)
似乎很奇怪,但这是您可以写lookup
-
const data =
{ "^\/a": 'value1'
, "^\/b": 'value2'
, "^\/d": 'value3'
}
const lookup = (str = "", o = {}) =>
( Object
.entries (o)
.find (([ k, _ ]) => (new RegExp (k)) .test (str))
|| []
)
[1]
console .log
( lookup ('/a', data) // value1
, lookup ('/b', data) // value2
, lookup ('/c', data) // undefined
)