javascript实现快速映射,类似这样:
let config = {
'年|year|nian': 'year',
'月|month|yue': 'month'
}
function a(type) {
type = config[type]; // 只要type能和映射表某一键值匹配,则能快速映射为另一个值
console.log(type);
}
a('年');
a('month');
a('year');
这样不用写if else,并且后续维护也比较简单,只要添加或者删除映射表里的映射规则即可
下面是我实现的映射方法,但是这样写效率太低了,每次都要遍历,而且都要new一个正则对象
let config = {
'年|year|nian': 'year',
'月|month|yue': 'month'
};
function getType(type) {
let tstr,
treg;
type = type + '';
for (tstr in config) {
treg = new RegExp(tstr, 'g');
if (treg.test(type)) {
return config[tstr];
}
}
}
思路
首先很容易想到的是一个查找表(映射表),而 JS 里最简单的映射表就是 JS 对象。
从题主提供的
config
来看,是多个键对应同一个映射目标,多组这样的对应关系。而需要的结果是一对一的对应关系,所以很容易想到,将多对一关系拆分成多个一对一关系。所以下面的代码就干了两件事情,① 将原来的一个 Key 拆分成多个 Key,生成一对一关系的映射表;② 提供一个查询函数,在生成的映射表中查询结果。
代码及演示
可改进之处
现在这个处理没有考虑 config 更新的情况,但这个不是主要问题。主要问题是没有容错,如果调用
a()
的时候,没有找到相应的 key,会返回undefined
,这个可以按实际需求对返回值进行处理,比如假设未查询,要求返回原值,那么可以将查询函数修改为