updated 变量声明修改

This commit is contained in:
PASSER-BY 2023-01-13 23:04:03 +08:00
parent 15bcd4ebca
commit 8ef4c3eb88
9 changed files with 141 additions and 141 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,8 +3,8 @@
*/
import {modeData as _data} from './mode';
var _cache = {};
for(var key in _data){
let _cache = {};
for(let key in _data){
_data[key].forEach(function(name){
if(typeof _cache[name]=='undefined'){
_cache[name] = [];

View File

@ -9,7 +9,7 @@ import {modeData as _data} from './mode';
// 逆转ID
export function reverseId(id,sex){
var hash = {
let hash = {
f:['d','s'],
m:['d','s'],
h:['w',''],
@ -23,7 +23,7 @@ export function reverseId(id,sex){
os:['ls','lb'],
xs:['xs','xb']
};
var age = '';
let age = '';
if(id.match(/&o$/)){
age = '&l';
}else if(id.match(/&l$/)){
@ -39,15 +39,15 @@ export function reverseId(id,sex){
sex = 0;
}
}
var result = [];
var doing = function(sex){
var sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
let result = [];
let doing = function(sex){
let sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
sid = sid.substring(0,sid.length-2);
var id_arr = id.split(',').reverse();
var sid_arr = sid.split(',').reverse();
var arr = id_arr.map((id,i)=>hash[id][sid_arr[i]]);
var r_id = arr.join(',');
var gen = getGenById(r_id);
let id_arr = id.split(',').reverse();
let sid_arr = sid.split(',').reverse();
let arr = id_arr.map((id,i)=>hash[id][sid_arr[i]]);
let r_id = arr.join(',');
let gen = getGenById(r_id);
return r_id +(gen?'':age);
};
if(sex<0){
@ -63,20 +63,20 @@ export function reverseId(id,sex){
// ID列表去重
export function filterId(arr){
var sameList = arr.filter(item=>item==item.replace(/[ol](?=[s|b])/g,'x').replace(/&[ol]/,''));
let sameList = arr.filter(item=>item==item.replace(/[ol](?=[s|b])/g,'x').replace(/&[ol]/,''));
return arr.filter(item=>{
var temp = item.replace(/[ol](?=[s|b])/g,'x').replace(/&[ol]/,'');
let temp = item.replace(/[ol](?=[s|b])/g,'x').replace(/&[ol]/,'');
return sameList.includes(item)||item!=temp&&!sameList.includes(temp);
}).filter((item,idx,arr) => arr.indexOf(item) === idx);
};
// 通过ID获取世代数
export function getGenById(id){
var gMap = {'f':1,'m':1,'s':-1,'d':-1};
var arr = id.split(',');
var gen = 0;
let gMap = {'f':1,'m':1,'s':-1,'d':-1};
let arr = id.split(',');
let gen = 0;
arr.forEach(function(sub){
var s = sub.replace(/&[ol\d]+/,'');
let s = sub.replace(/&[ol\d]+/,'');
gen += gMap[s]||0;
});
return gen;
@ -84,14 +84,14 @@ export function getGenById(id){
// 通过ID获取关系称呼
export function getItemsById(id){
var items = [];
var getData = function(key){
var res = [];
let items = [];
let getData = function(key){
let res = [];
if(_data[key]){
res.push(_data[key][0]);
}else{
var ids = [];
var k = key.replace(/[ol](b|s)/,'x$1');
let ids = [];
let k = key.replace(/[ol](b|s)/,'x$1');
if(_data[k]){
ids.push(k);
}
@ -111,12 +111,12 @@ export function getItemsById(id){
};
// 对排序进行处理
if(id.match(/&([\d]+)(,[hw])?$/)){
var num = id.match(/&([\d]+)(,[hw])?$/)[1];
var zh = number2zh(num);
let num = id.match(/&([\d]+)(,[hw])?$/)[1];
let zh = number2zh(num);
id = id.replace(/&\d+/g,'');
if(_data[id]){
var item = '';
var gen = getGenById(id);
let item = '';
let gen = getGenById(id);
if(gen<3&&!id.match(/[hw],/)){
_data[id].forEach(function(name){
if(!item&&name.includes('几')){
@ -150,22 +150,22 @@ export function getItemsById(id){
}
// 缩小访问查找
if(!items.length){
var l = id.replace(/x/g,'l');
var o = id.replace(/x/g,'o');
let l = id.replace(/x/g,'l');
let o = id.replace(/x/g,'o');
items = items.concat(getData(o),getData(l));
}
return items;
};
// 通过ID获取关系链
var data = Object.assign({},_data,{
let data = Object.assign({},_data,{
'xb':['兄弟'],
'xs':['姐妹']
});
export function getChainById(id,sex){
var arr = id.split(',');
var item = arr.map(function(sign){
var key = sign.replace(/&[ol\d]+/,'');
let arr = id.split(',');
let item = arr.map(function(sign){
let key = sign.replace(/&[ol\d]+/,'');
return data[key][0];
}).join('的');
if(sex&&sex>-1&&data[sex+','+id]){
@ -180,24 +180,24 @@ export function getChainById(id,sex){
// 通过ID获取关系合称
export function getPairsById(id1,id2){
var result = [];
var result_x = [];
var result_r = [];
let result = [];
let result_x = [];
let result_r = [];
id1 = id1.replace(/&\d+/,'');
id2 = id2.replace(/&\d+/,'');
var id1_x = id1.replace(/([ol])([bs])/,'x$2');
var id2_x = id2.replace(/([ol])([bs])/,'x$2');
var id1_r = id1.replace(/&[ol]/,'');
var id2_r = id2.replace(/&[ol]/,'');
for(var key in _pair){
var selectors = key.split('#');
let id1_x = id1.replace(/([ol])([bs])/,'x$2');
let id2_x = id2.replace(/([ol])([bs])/,'x$2');
let id1_r = id1.replace(/&[ol]/,'');
let id2_r = id2.replace(/&[ol]/,'');
for(let key in _pair){
let selectors = key.split('#');
if(selectors.length>1){
var list1 = selector2id(selectors[0]);
var list2 = selector2id(selectors[1]);
var list1_r = list1.map(function(selector){
let list1 = selector2id(selectors[0]);
let list2 = selector2id(selectors[1]);
let list1_r = list1.map(function(selector){
return selector.replace(/&[ol\d]+/,'').replace(/([ol])([bs])/,'x$2');
});
var list2_r = list2.map(function(selector){
let list2_r = list2.map(function(selector){
return selector.replace(/&[ol\d]+/,'').replace(/([ol])([bs])/,'x$2');
});
if(list1.includes(id1)&&list2.includes(id2)||list1.includes(id2)&&list2.includes(id1)){

View File

@ -10,17 +10,17 @@ import {
expandSelector
} from './selector';
var _map = Object.assign({},_multipie);
var getMap = function(prefixMap,branch){
var map = {};
for(var key in branch){
var tag = key.match(/\{.+?\}/)[0];
var nameList = branch[key];
for(var k in prefixMap[tag]){
var prefixList = prefixMap[tag][k];
var newKey = key.replace(tag,k);
var isFilter = ['h,h','w,w','w,h','h,w'].some(pair=>(newKey.includes(pair)));
var newList = [];
let _map = Object.assign({},_multipie);
let getMap = function(prefixMap,branch){
let map = {};
for(let key in branch){
let tag = key.match(/\{.+?\}/)[0];
let nameList = branch[key];
for(let k in prefixMap[tag]){
let prefixList = prefixMap[tag][k];
let newKey = key.replace(tag,k);
let isFilter = ['h,h','w,w','w,h','h,w'].some(pair=>(newKey.includes(pair)));
let newList = [];
if(!isFilter){
prefixList.forEach(function(prefix){
nameList.forEach(function(name){
@ -38,19 +38,19 @@ var getMap = function(prefixMap,branch){
return map;
};
// 分支前缀处理
var prefixMap1 = {};
for(var key in _prefix){
let prefixMap1 = {};
for(let key in _prefix){
prefixMap1[key] = {};
for(var selector in _prefix[key]){
for(let selector in _prefix[key]){
if(selector.indexOf(']')==-1){
prefixMap1[key][selector] = _prefix[key][selector];
}
}
}
var prefixMap2 = {};
for(var key in _prefix){
let prefixMap2 = {};
for(let key in _prefix){
prefixMap2[key] = {};
for(var selector in _prefix[key]){
for(let selector in _prefix[key]){
if(selector.indexOf(']')>-1){
expandSelector(selector).forEach(function(s){
prefixMap2[key][s] = _prefix[key][selector];
@ -60,7 +60,7 @@ for(var key in _prefix){
}
_map = Object.assign({},_map,getMap(prefixMap1,_branch),getMap(prefixMap2,_branch));
// 主要关系
for(var key in _main){
for(let key in _main){
_map[key] = [].concat(_main[key],_map[key]||[]);
}
@ -68,26 +68,26 @@ for(var key in _main){
_map['o']=['passer-by.com','\u4f5c\u8005'];
// 配偶关系
var branch = {
const branch = {
'w':['妻','内','岳','岳家','丈人'],
'h':['夫','外','公','婆家','婆婆'],
};
var nameSet = new Set(Object.values(_map).flat());
for(var key in _map){
let nameSet = new Set(Object.values(_map).flat());
for(let key in _map){
if(key.match(/^[fm]/)||key.match(/^[olx][bs]$|^[olx][bs],[^mf]/)){ // 只对长辈或者兄弟辈匹配
for(var k in branch){
var newKey = k+','+key;
for(let k in branch){
let newKey = k+','+key;
if(_map[newKey.replace(/,[ol]([sb])(,[wh])?$/,',x$1$2').replace(/(,[sd])&[ol](,[wh])?$/,'$1$2')]){ // 不扩大解释年龄
continue;
}
if(!_map[newKey]){
_map[newKey] = [];
}
var prefixList = branch[k];
var nameList = _map[key];
let prefixList = branch[k];
let nameList = _map[key];
prefixList.forEach(function(prefix){
nameList.forEach(function(name){
var newName = prefix+name;
let newName = prefix+name;
if(!nameSet.has(newName)){ // 配偶组合的称呼不得已原有称呼冲突(如:妻舅!=妻子的舅舅;外舅公!=老公的舅公)
_map[newKey].push(newName);
}

View File

@ -3,8 +3,8 @@
*/
import _map from './map';
var _mode = {}; // 模式缓存
var _data = Object.assign({},_map); // 最终数据
let _mode = {}; // 模式缓存
let _data = Object.assign({},_map); // 最终数据
// 设置模式数据
export function setModeData(sign,data){
@ -15,7 +15,7 @@ export function setModeData(sign,data){
export function getModeData(sign){
_data = Object.assign({},_map);
if(sign&&_mode[sign]){
for(var key in _mode[sign]){
for(let key in _mode[sign]){
_data[key] = [].concat(_mode[sign][key],_map[key]||[]);
}
}

View File

@ -4,8 +4,8 @@
import _expression from './rule/expression';
export function getOptions(text){
for(var item of _expression){
var match = text.match(item['exp']);
for(let item of _expression){
let match = text.match(item['exp']);
if(match){
return item['opt'](match);
}

View File

@ -10,11 +10,11 @@ import {reverseId,filterId,getGenById} from './id';
import _cache from './cache';
// 获得最简
var getOptimal = function(options){
var {from,to,sex} = options;
var from_chain = options['from'].split(',');
var to_chain = options['to'].split(',');
for(var i=0;i<from_chain.length&&i<to_chain.length;i++){
let getOptimal = function(options){
let {from,to,sex} = options;
let from_chain = options['from'].split(',');
let to_chain = options['to'].split(',');
for(let i=0;i<from_chain.length&&i<to_chain.length;i++){
if(from_chain[i]==to_chain[i]){
from = from_chain.slice(i+1).join(',');
to = to_chain.slice(i+1).join(',');
@ -22,21 +22,21 @@ var getOptimal = function(options){
continue;
}else{
if(getGenById(from_chain[i])==getGenById(to_chain[i])&&from_chain[i].match(/^[xol][bs]|^[sd]/)&&to_chain[i].match(/^[xol][bs]|^[sd]/)){
var form_type = from_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
var to_type = to_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
let form_type = from_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
let to_type = to_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
if(form_type!=to_type){
break;
}
var from_match = from_chain[i].match(/&([ol\d]+)/);
var to_match = to_chain[i].match(/&([ol\d]+)/);
let from_match = from_chain[i].match(/&([ol\d]+)/);
let to_match = to_chain[i].match(/&([ol\d]+)/);
if(!from_match){
from_match = from_chain[i].match(/([ol])[bs]/);
}
if(!to_match){
to_match = to_chain[i].match(/([ol])[bs]/);
}
var from_attr = from_match?from_match[1]:'';
var to_attr = to_match?to_match[1]:'';
let from_attr = from_match?from_match[1]:'';
let to_attr = to_match?to_match[1]:'';
if(from_attr&&to_attr){
if(!isNaN(from_attr)&&!isNaN(to_attr)){
if(+from_attr>+to_attr){
@ -87,21 +87,21 @@ export function getSelectors(str){
str = str.replace(/(伯|叔)+(父|母)?家的?(哥|姐|弟|妹)+/,'堂$3').replace(/(伯|叔)+(父|母)?家的?/,'堂');
str = str.replace(/姨+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/,'姨$2').replace(/姨+(爸|父|丈|妈|母)?家的?/,'姨');
var lists = str.split('的');
var result = [];
var isMatch = true;
let lists = str.split('的');
let result = [];
let isMatch = true;
while(lists.length){
var name = lists.shift(); //当前匹配词
var items = []; //当前匹配词可能性
var x_items = [];
var r_items = [];
var i_items = [];
var keywords = [name];
var getList = function(name){
let name = lists.shift(); //当前匹配词
let items = []; //当前匹配词可能性
let x_items = [];
let r_items = [];
let i_items = [];
let keywords = [name];
let getList = function(name){
// 词义扩展
_replace.forEach(item => {
item['arr'].forEach(word =>{
var name1 = name.replace(item['exp'],word);
let name1 = name.replace(item['exp'],word);
if(name1!=name){
keywords.push(name1);
getList(name1);
@ -109,9 +109,9 @@ export function getSelectors(str){
});
});
// 同义词替换
for(var word in _similar){
var name1 = name.replace(word,_similar[word]);
var name2 = name.replace(_similar[word],word);
for(let word in _similar){
let name1 = name.replace(word,_similar[word]);
let name2 = name.replace(_similar[word],word);
if(name1!=name){
keywords.push(name1);
}
@ -123,29 +123,29 @@ export function getSelectors(str){
getList(name);
// 通过关键词找关系
keywords.forEach(function(name){
var match = name.match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
let match = name.match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
if(match){
var x_name = name.replace(match[0],'几');
var r_name = name.replace(match[0],'');
var num = zh2number(match[0]);
var x_ids = _cache[x_name]||[];
var r_ids = _cache[r_name]||[];
var i_ids = _cache[name]||[];
let x_name = name.replace(match[0],'几');
let r_name = name.replace(match[0],'');
let num = zh2number(match[0]);
let x_ids = _cache[x_name]||[];
let r_ids = _cache[r_name]||[];
let i_ids = _cache[name]||[];
if(x_ids.length){
x_ids.forEach(function(i){
var r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
let r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
x_items.push(r_i);
});
}else if(r_ids.length){
r_ids.forEach(function(i){
var r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
let r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
if(!i.match(/^[mf,]+$/)&&!r_name.match(/^[从世]/)){ // 直系祖辈不参与排序
r_items.push(r_i);
}
});
}else{
i_ids.forEach(function(i){
var r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
let r_i = i.replace(/(,[hw])$/,'&'+num+'$1').replace(/([^hw]+)$/,'$1&'+num);
i_items.push(r_i);
});
}
@ -167,7 +167,7 @@ export function getSelectors(str){
if(!items.length){
isMatch = false;
}
var res = [];
let res = [];
if(!result.length){
result = [''];
}
@ -183,10 +183,10 @@ export function getSelectors(str){
// 合并选择器,查找两个对象之间的关系
export function mergeSelector(param){
var {from:from_selector,to:to_selector,sex:my_sex} = param;
let {from:from_selector,to:to_selector,sex:my_sex} = param;
if(my_sex<0){
var to_sex = -1;
var from_sex = -1;
let to_sex = -1;
let from_sex = -1;
if(from_selector.match(/^,[w1]/)){
from_sex = 1;
}else if(from_selector.match(/^,[h0]/)){
@ -207,16 +207,16 @@ export function mergeSelector(param){
return [];
}
}
var from_ids = selector2id(param['from'],my_sex);
var to_ids = selector2id(param['to'],my_sex);
let from_ids = selector2id(param['from'],my_sex);
let to_ids = selector2id(param['to'],my_sex);
if(!from_ids.length||!to_ids.length){
return [];
}
var result = [];
let result = [];
from_ids.forEach(function(from){
to_ids.forEach(function(to){
var sex = my_sex;
var selector = ','+to;
let sex = my_sex;
let selector = ','+to;
if(selector.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/)){
sex = 1;
}
@ -224,12 +224,12 @@ export function mergeSelector(param){
sex = 0;
}
if(from&&to){
var isOptimal = param.optimal;
let isOptimal = param.optimal;
if(from.match(/&\d+/)||to.match(/&\d+/)){
isOptimal = true;
}
if(isOptimal){
var ops = getOptimal({
let ops = getOptimal({
'from':from,
'to':to,
'sex':my_sex,
@ -240,9 +240,9 @@ export function mergeSelector(param){
my_sex = ops['sex'];
}
}
var to_rids = to?reverseId(to,my_sex):[''];
let to_rids = to?reverseId(to,my_sex):[''];
to_rids.forEach(function(to_r){
var selector = (to_r?','+to_r:'')+(from?','+from:'');
let selector = (to_r?','+to_r:'')+(from?','+from:'');
result.push({
'selector':selector,
'sex':sex
@ -255,15 +255,15 @@ export function mergeSelector(param){
// 扩展选择器
export function expandSelector(selector){
var result = [];
var hash = {};
var getSelector = function(selector){
var s='';
let result = [];
let hash = {};
let getSelector = function(selector){
let s='';
if(!hash[selector]){
hash[selector] = true;
do{
s = selector;
for(var item of _filter){
for(let item of _filter){
// console.log('[filter]',item['exp'],selector);
selector = selector.replace(item['exp'],item['str']);
if(selector.includes('#')){
@ -305,7 +305,7 @@ export function selector2id(selector,sex){
if(selector.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/)){ //同志关系去除
return [];
}
var result = expandSelector(selector).map(function(selector){
let result = expandSelector(selector).map(function(selector){
return selector.replace(/,[01]/,'').substr(1); //去前面逗号和性别信息
});
return filterId(result);

View File

@ -2,16 +2,16 @@
* 数值转换
*/
var textAttr = ['','一','二','三','四','五','六','七','八','九','十'];
const textAttr = ['','一','二','三','四','五','六','七','八','九','十'];
// 中文数字转阿拉伯数字
export function zh2number(text){
var num = 0;
var map = {'大':1,'小':99};
let num = 0;
const map = {'大':1,'小':99};
if(map[text]){
num = map[text];
}else{
var [unit,dec=0] = text.replace(/^十/,'一十').split('十').map(word=> textAttr.indexOf(word)).reverse();
let [unit,dec=0] = text.replace(/^十/,'一十').split('十').map(word=> textAttr.indexOf(word)).reverse();
num = dec*10+unit;
}
return num;
@ -19,13 +19,13 @@ export function zh2number(text){
// 阿拉伯数字转中文数字
export function number2zh(num){
var text = '';
var map = {1:'大',99:'小'};
let text = '';
const map = {1:'大',99:'小'};
if(map[num]){
text = map[num];
}else{
var dec = ~~(num/10);
var unit = num%10;
let dec = ~~(num/10);
let unit = num%10;
text = (dec?(textAttr[dec]+'十').replace('一十','十'):'')+textAttr[unit];
}
return text;