updated 变量声明修改
This commit is contained in:
parent
15bcd4ebca
commit
8ef4c3eb88
2
dist/relationship.min.js
vendored
2
dist/relationship.min.js
vendored
File diff suppressed because one or more lines are too long
2
dist/relationship.zh-HK.min.js
vendored
2
dist/relationship.zh-HK.min.js
vendored
File diff suppressed because one or more lines are too long
@ -3,8 +3,8 @@
|
|||||||
*/
|
*/
|
||||||
import {modeData as _data} from './mode';
|
import {modeData as _data} from './mode';
|
||||||
|
|
||||||
var _cache = {};
|
let _cache = {};
|
||||||
for(var key in _data){
|
for(let key in _data){
|
||||||
_data[key].forEach(function(name){
|
_data[key].forEach(function(name){
|
||||||
if(typeof _cache[name]=='undefined'){
|
if(typeof _cache[name]=='undefined'){
|
||||||
_cache[name] = [];
|
_cache[name] = [];
|
||||||
|
@ -9,7 +9,7 @@ import {modeData as _data} from './mode';
|
|||||||
|
|
||||||
// 逆转ID
|
// 逆转ID
|
||||||
export function reverseId(id,sex){
|
export function reverseId(id,sex){
|
||||||
var hash = {
|
let hash = {
|
||||||
f:['d','s'],
|
f:['d','s'],
|
||||||
m:['d','s'],
|
m:['d','s'],
|
||||||
h:['w',''],
|
h:['w',''],
|
||||||
@ -23,7 +23,7 @@ export function reverseId(id,sex){
|
|||||||
os:['ls','lb'],
|
os:['ls','lb'],
|
||||||
xs:['xs','xb']
|
xs:['xs','xb']
|
||||||
};
|
};
|
||||||
var age = '';
|
let age = '';
|
||||||
if(id.match(/&o$/)){
|
if(id.match(/&o$/)){
|
||||||
age = '&l';
|
age = '&l';
|
||||||
}else if(id.match(/&l$/)){
|
}else if(id.match(/&l$/)){
|
||||||
@ -39,15 +39,15 @@ export function reverseId(id,sex){
|
|||||||
sex = 0;
|
sex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var result = [];
|
let result = [];
|
||||||
var doing = function(sex){
|
let doing = function(sex){
|
||||||
var sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
|
let sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
|
||||||
sid = sid.substring(0,sid.length-2);
|
sid = sid.substring(0,sid.length-2);
|
||||||
var id_arr = id.split(',').reverse();
|
let id_arr = id.split(',').reverse();
|
||||||
var sid_arr = sid.split(',').reverse();
|
let sid_arr = sid.split(',').reverse();
|
||||||
var arr = id_arr.map((id,i)=>hash[id][sid_arr[i]]);
|
let arr = id_arr.map((id,i)=>hash[id][sid_arr[i]]);
|
||||||
var r_id = arr.join(',');
|
let r_id = arr.join(',');
|
||||||
var gen = getGenById(r_id);
|
let gen = getGenById(r_id);
|
||||||
return r_id +(gen?'':age);
|
return r_id +(gen?'':age);
|
||||||
};
|
};
|
||||||
if(sex<0){
|
if(sex<0){
|
||||||
@ -63,20 +63,20 @@ export function reverseId(id,sex){
|
|||||||
|
|
||||||
// ID列表去重
|
// ID列表去重
|
||||||
export function filterId(arr){
|
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=>{
|
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);
|
return sameList.includes(item)||item!=temp&&!sameList.includes(temp);
|
||||||
}).filter((item,idx,arr) => arr.indexOf(item) === idx);
|
}).filter((item,idx,arr) => arr.indexOf(item) === idx);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 通过ID获取世代数
|
// 通过ID获取世代数
|
||||||
export function getGenById(id){
|
export function getGenById(id){
|
||||||
var gMap = {'f':1,'m':1,'s':-1,'d':-1};
|
let gMap = {'f':1,'m':1,'s':-1,'d':-1};
|
||||||
var arr = id.split(',');
|
let arr = id.split(',');
|
||||||
var gen = 0;
|
let gen = 0;
|
||||||
arr.forEach(function(sub){
|
arr.forEach(function(sub){
|
||||||
var s = sub.replace(/&[ol\d]+/,'');
|
let s = sub.replace(/&[ol\d]+/,'');
|
||||||
gen += gMap[s]||0;
|
gen += gMap[s]||0;
|
||||||
});
|
});
|
||||||
return gen;
|
return gen;
|
||||||
@ -84,14 +84,14 @@ export function getGenById(id){
|
|||||||
|
|
||||||
// 通过ID获取关系称呼
|
// 通过ID获取关系称呼
|
||||||
export function getItemsById(id){
|
export function getItemsById(id){
|
||||||
var items = [];
|
let items = [];
|
||||||
var getData = function(key){
|
let getData = function(key){
|
||||||
var res = [];
|
let res = [];
|
||||||
if(_data[key]){
|
if(_data[key]){
|
||||||
res.push(_data[key][0]);
|
res.push(_data[key][0]);
|
||||||
}else{
|
}else{
|
||||||
var ids = [];
|
let ids = [];
|
||||||
var k = key.replace(/[ol](b|s)/,'x$1');
|
let k = key.replace(/[ol](b|s)/,'x$1');
|
||||||
if(_data[k]){
|
if(_data[k]){
|
||||||
ids.push(k);
|
ids.push(k);
|
||||||
}
|
}
|
||||||
@ -111,12 +111,12 @@ export function getItemsById(id){
|
|||||||
};
|
};
|
||||||
// 对排序进行处理
|
// 对排序进行处理
|
||||||
if(id.match(/&([\d]+)(,[hw])?$/)){
|
if(id.match(/&([\d]+)(,[hw])?$/)){
|
||||||
var num = id.match(/&([\d]+)(,[hw])?$/)[1];
|
let num = id.match(/&([\d]+)(,[hw])?$/)[1];
|
||||||
var zh = number2zh(num);
|
let zh = number2zh(num);
|
||||||
id = id.replace(/&\d+/g,'');
|
id = id.replace(/&\d+/g,'');
|
||||||
if(_data[id]){
|
if(_data[id]){
|
||||||
var item = '';
|
let item = '';
|
||||||
var gen = getGenById(id);
|
let gen = getGenById(id);
|
||||||
if(gen<3&&!id.match(/[hw],/)){
|
if(gen<3&&!id.match(/[hw],/)){
|
||||||
_data[id].forEach(function(name){
|
_data[id].forEach(function(name){
|
||||||
if(!item&&name.includes('几')){
|
if(!item&&name.includes('几')){
|
||||||
@ -150,22 +150,22 @@ export function getItemsById(id){
|
|||||||
}
|
}
|
||||||
// 缩小访问查找
|
// 缩小访问查找
|
||||||
if(!items.length){
|
if(!items.length){
|
||||||
var l = id.replace(/x/g,'l');
|
let l = id.replace(/x/g,'l');
|
||||||
var o = id.replace(/x/g,'o');
|
let o = id.replace(/x/g,'o');
|
||||||
items = items.concat(getData(o),getData(l));
|
items = items.concat(getData(o),getData(l));
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 通过ID获取关系链
|
// 通过ID获取关系链
|
||||||
var data = Object.assign({},_data,{
|
let data = Object.assign({},_data,{
|
||||||
'xb':['兄弟'],
|
'xb':['兄弟'],
|
||||||
'xs':['姐妹']
|
'xs':['姐妹']
|
||||||
});
|
});
|
||||||
export function getChainById(id,sex){
|
export function getChainById(id,sex){
|
||||||
var arr = id.split(',');
|
let arr = id.split(',');
|
||||||
var item = arr.map(function(sign){
|
let item = arr.map(function(sign){
|
||||||
var key = sign.replace(/&[ol\d]+/,'');
|
let key = sign.replace(/&[ol\d]+/,'');
|
||||||
return data[key][0];
|
return data[key][0];
|
||||||
}).join('的');
|
}).join('的');
|
||||||
if(sex&&sex>-1&&data[sex+','+id]){
|
if(sex&&sex>-1&&data[sex+','+id]){
|
||||||
@ -180,24 +180,24 @@ export function getChainById(id,sex){
|
|||||||
|
|
||||||
// 通过ID获取关系合称
|
// 通过ID获取关系合称
|
||||||
export function getPairsById(id1,id2){
|
export function getPairsById(id1,id2){
|
||||||
var result = [];
|
let result = [];
|
||||||
var result_x = [];
|
let result_x = [];
|
||||||
var result_r = [];
|
let result_r = [];
|
||||||
id1 = id1.replace(/&\d+/,'');
|
id1 = id1.replace(/&\d+/,'');
|
||||||
id2 = id2.replace(/&\d+/,'');
|
id2 = id2.replace(/&\d+/,'');
|
||||||
var id1_x = id1.replace(/([ol])([bs])/,'x$2');
|
let id1_x = id1.replace(/([ol])([bs])/,'x$2');
|
||||||
var id2_x = id2.replace(/([ol])([bs])/,'x$2');
|
let id2_x = id2.replace(/([ol])([bs])/,'x$2');
|
||||||
var id1_r = id1.replace(/&[ol]/,'');
|
let id1_r = id1.replace(/&[ol]/,'');
|
||||||
var id2_r = id2.replace(/&[ol]/,'');
|
let id2_r = id2.replace(/&[ol]/,'');
|
||||||
for(var key in _pair){
|
for(let key in _pair){
|
||||||
var selectors = key.split('#');
|
let selectors = key.split('#');
|
||||||
if(selectors.length>1){
|
if(selectors.length>1){
|
||||||
var list1 = selector2id(selectors[0]);
|
let list1 = selector2id(selectors[0]);
|
||||||
var list2 = selector2id(selectors[1]);
|
let list2 = selector2id(selectors[1]);
|
||||||
var list1_r = list1.map(function(selector){
|
let list1_r = list1.map(function(selector){
|
||||||
return selector.replace(/&[ol\d]+/,'').replace(/([ol])([bs])/,'x$2');
|
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');
|
return selector.replace(/&[ol\d]+/,'').replace(/([ol])([bs])/,'x$2');
|
||||||
});
|
});
|
||||||
if(list1.includes(id1)&&list2.includes(id2)||list1.includes(id2)&&list2.includes(id1)){
|
if(list1.includes(id1)&&list2.includes(id2)||list1.includes(id2)&&list2.includes(id1)){
|
||||||
|
@ -10,17 +10,17 @@ import {
|
|||||||
expandSelector
|
expandSelector
|
||||||
} from './selector';
|
} from './selector';
|
||||||
|
|
||||||
var _map = Object.assign({},_multipie);
|
let _map = Object.assign({},_multipie);
|
||||||
var getMap = function(prefixMap,branch){
|
let getMap = function(prefixMap,branch){
|
||||||
var map = {};
|
let map = {};
|
||||||
for(var key in branch){
|
for(let key in branch){
|
||||||
var tag = key.match(/\{.+?\}/)[0];
|
let tag = key.match(/\{.+?\}/)[0];
|
||||||
var nameList = branch[key];
|
let nameList = branch[key];
|
||||||
for(var k in prefixMap[tag]){
|
for(let k in prefixMap[tag]){
|
||||||
var prefixList = prefixMap[tag][k];
|
let prefixList = prefixMap[tag][k];
|
||||||
var newKey = key.replace(tag,k);
|
let newKey = key.replace(tag,k);
|
||||||
var isFilter = ['h,h','w,w','w,h','h,w'].some(pair=>(newKey.includes(pair)));
|
let isFilter = ['h,h','w,w','w,h','h,w'].some(pair=>(newKey.includes(pair)));
|
||||||
var newList = [];
|
let newList = [];
|
||||||
if(!isFilter){
|
if(!isFilter){
|
||||||
prefixList.forEach(function(prefix){
|
prefixList.forEach(function(prefix){
|
||||||
nameList.forEach(function(name){
|
nameList.forEach(function(name){
|
||||||
@ -38,19 +38,19 @@ var getMap = function(prefixMap,branch){
|
|||||||
return map;
|
return map;
|
||||||
};
|
};
|
||||||
// 分支前缀处理
|
// 分支前缀处理
|
||||||
var prefixMap1 = {};
|
let prefixMap1 = {};
|
||||||
for(var key in _prefix){
|
for(let key in _prefix){
|
||||||
prefixMap1[key] = {};
|
prefixMap1[key] = {};
|
||||||
for(var selector in _prefix[key]){
|
for(let selector in _prefix[key]){
|
||||||
if(selector.indexOf(']')==-1){
|
if(selector.indexOf(']')==-1){
|
||||||
prefixMap1[key][selector] = _prefix[key][selector];
|
prefixMap1[key][selector] = _prefix[key][selector];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var prefixMap2 = {};
|
let prefixMap2 = {};
|
||||||
for(var key in _prefix){
|
for(let key in _prefix){
|
||||||
prefixMap2[key] = {};
|
prefixMap2[key] = {};
|
||||||
for(var selector in _prefix[key]){
|
for(let selector in _prefix[key]){
|
||||||
if(selector.indexOf(']')>-1){
|
if(selector.indexOf(']')>-1){
|
||||||
expandSelector(selector).forEach(function(s){
|
expandSelector(selector).forEach(function(s){
|
||||||
prefixMap2[key][s] = _prefix[key][selector];
|
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));
|
_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]||[]);
|
_map[key] = [].concat(_main[key],_map[key]||[]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,26 +68,26 @@ for(var key in _main){
|
|||||||
_map['o']=['passer-by.com','\u4f5c\u8005'];
|
_map['o']=['passer-by.com','\u4f5c\u8005'];
|
||||||
|
|
||||||
// 配偶关系
|
// 配偶关系
|
||||||
var branch = {
|
const branch = {
|
||||||
'w':['妻','内','岳','岳家','丈人'],
|
'w':['妻','内','岳','岳家','丈人'],
|
||||||
'h':['夫','外','公','婆家','婆婆'],
|
'h':['夫','外','公','婆家','婆婆'],
|
||||||
};
|
};
|
||||||
var nameSet = new Set(Object.values(_map).flat());
|
let nameSet = new Set(Object.values(_map).flat());
|
||||||
for(var key in _map){
|
for(let key in _map){
|
||||||
if(key.match(/^[fm]/)||key.match(/^[olx][bs]$|^[olx][bs],[^mf]/)){ // 只对长辈或者兄弟辈匹配
|
if(key.match(/^[fm]/)||key.match(/^[olx][bs]$|^[olx][bs],[^mf]/)){ // 只对长辈或者兄弟辈匹配
|
||||||
for(var k in branch){
|
for(let k in branch){
|
||||||
var newKey = k+','+key;
|
let newKey = k+','+key;
|
||||||
if(_map[newKey.replace(/,[ol]([sb])(,[wh])?$/,',x$1$2').replace(/(,[sd])&[ol](,[wh])?$/,'$1$2')]){ // 不扩大解释年龄
|
if(_map[newKey.replace(/,[ol]([sb])(,[wh])?$/,',x$1$2').replace(/(,[sd])&[ol](,[wh])?$/,'$1$2')]){ // 不扩大解释年龄
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if(!_map[newKey]){
|
if(!_map[newKey]){
|
||||||
_map[newKey] = [];
|
_map[newKey] = [];
|
||||||
}
|
}
|
||||||
var prefixList = branch[k];
|
let prefixList = branch[k];
|
||||||
var nameList = _map[key];
|
let nameList = _map[key];
|
||||||
prefixList.forEach(function(prefix){
|
prefixList.forEach(function(prefix){
|
||||||
nameList.forEach(function(name){
|
nameList.forEach(function(name){
|
||||||
var newName = prefix+name;
|
let newName = prefix+name;
|
||||||
if(!nameSet.has(newName)){ // 配偶组合的称呼不得已原有称呼冲突(如:妻舅!=妻子的舅舅;外舅公!=老公的舅公)
|
if(!nameSet.has(newName)){ // 配偶组合的称呼不得已原有称呼冲突(如:妻舅!=妻子的舅舅;外舅公!=老公的舅公)
|
||||||
_map[newKey].push(newName);
|
_map[newKey].push(newName);
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
*/
|
*/
|
||||||
import _map from './map';
|
import _map from './map';
|
||||||
|
|
||||||
var _mode = {}; // 模式缓存
|
let _mode = {}; // 模式缓存
|
||||||
var _data = Object.assign({},_map); // 最终数据
|
let _data = Object.assign({},_map); // 最终数据
|
||||||
|
|
||||||
// 设置模式数据
|
// 设置模式数据
|
||||||
export function setModeData(sign,data){
|
export function setModeData(sign,data){
|
||||||
@ -15,7 +15,7 @@ export function setModeData(sign,data){
|
|||||||
export function getModeData(sign){
|
export function getModeData(sign){
|
||||||
_data = Object.assign({},_map);
|
_data = Object.assign({},_map);
|
||||||
if(sign&&_mode[sign]){
|
if(sign&&_mode[sign]){
|
||||||
for(var key in _mode[sign]){
|
for(let key in _mode[sign]){
|
||||||
_data[key] = [].concat(_mode[sign][key],_map[key]||[]);
|
_data[key] = [].concat(_mode[sign][key],_map[key]||[]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
import _expression from './rule/expression';
|
import _expression from './rule/expression';
|
||||||
|
|
||||||
export function getOptions(text){
|
export function getOptions(text){
|
||||||
for(var item of _expression){
|
for(let item of _expression){
|
||||||
var match = text.match(item['exp']);
|
let match = text.match(item['exp']);
|
||||||
if(match){
|
if(match){
|
||||||
return item['opt'](match);
|
return item['opt'](match);
|
||||||
}
|
}
|
||||||
|
@ -10,11 +10,11 @@ import {reverseId,filterId,getGenById} from './id';
|
|||||||
import _cache from './cache';
|
import _cache from './cache';
|
||||||
|
|
||||||
// 获得最简
|
// 获得最简
|
||||||
var getOptimal = function(options){
|
let getOptimal = function(options){
|
||||||
var {from,to,sex} = options;
|
let {from,to,sex} = options;
|
||||||
var from_chain = options['from'].split(',');
|
let from_chain = options['from'].split(',');
|
||||||
var to_chain = options['to'].split(',');
|
let to_chain = options['to'].split(',');
|
||||||
for(var i=0;i<from_chain.length&&i<to_chain.length;i++){
|
for(let i=0;i<from_chain.length&&i<to_chain.length;i++){
|
||||||
if(from_chain[i]==to_chain[i]){
|
if(from_chain[i]==to_chain[i]){
|
||||||
from = from_chain.slice(i+1).join(',');
|
from = from_chain.slice(i+1).join(',');
|
||||||
to = to_chain.slice(i+1).join(',');
|
to = to_chain.slice(i+1).join(',');
|
||||||
@ -22,21 +22,21 @@ var getOptimal = function(options){
|
|||||||
continue;
|
continue;
|
||||||
}else{
|
}else{
|
||||||
if(getGenById(from_chain[i])==getGenById(to_chain[i])&&from_chain[i].match(/^[xol][bs]|^[sd]/)&&to_chain[i].match(/^[xol][bs]|^[sd]/)){
|
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');
|
let 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 to_type = to_chain[i].replace(/&([ol\d]+)/,'').replace(/^[xol]([bs])/,'$1');
|
||||||
if(form_type!=to_type){
|
if(form_type!=to_type){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var from_match = from_chain[i].match(/&([ol\d]+)/);
|
let from_match = from_chain[i].match(/&([ol\d]+)/);
|
||||||
var to_match = to_chain[i].match(/&([ol\d]+)/);
|
let to_match = to_chain[i].match(/&([ol\d]+)/);
|
||||||
if(!from_match){
|
if(!from_match){
|
||||||
from_match = from_chain[i].match(/([ol])[bs]/);
|
from_match = from_chain[i].match(/([ol])[bs]/);
|
||||||
}
|
}
|
||||||
if(!to_match){
|
if(!to_match){
|
||||||
to_match = to_chain[i].match(/([ol])[bs]/);
|
to_match = to_chain[i].match(/([ol])[bs]/);
|
||||||
}
|
}
|
||||||
var from_attr = from_match?from_match[1]:'';
|
let from_attr = from_match?from_match[1]:'';
|
||||||
var to_attr = to_match?to_match[1]:'';
|
let to_attr = to_match?to_match[1]:'';
|
||||||
if(from_attr&&to_attr){
|
if(from_attr&&to_attr){
|
||||||
if(!isNaN(from_attr)&&!isNaN(to_attr)){
|
if(!isNaN(from_attr)&&!isNaN(to_attr)){
|
||||||
if(+from_attr>+to_attr){
|
if(+from_attr>+to_attr){
|
||||||
@ -87,21 +87,21 @@ export function getSelectors(str){
|
|||||||
str = str.replace(/(伯|叔)+(父|母)?家的?(哥|姐|弟|妹)+/,'堂$3').replace(/(伯|叔)+(父|母)?家的?/,'堂');
|
str = str.replace(/(伯|叔)+(父|母)?家的?(哥|姐|弟|妹)+/,'堂$3').replace(/(伯|叔)+(父|母)?家的?/,'堂');
|
||||||
str = str.replace(/姨+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/,'姨$2').replace(/姨+(爸|父|丈|妈|母)?家的?/,'姨');
|
str = str.replace(/姨+(爸|父|丈|妈|母)?家的?(哥|姐|弟|妹)+/,'姨$2').replace(/姨+(爸|父|丈|妈|母)?家的?/,'姨');
|
||||||
|
|
||||||
var lists = str.split('的');
|
let lists = str.split('的');
|
||||||
var result = [];
|
let result = [];
|
||||||
var isMatch = true;
|
let isMatch = true;
|
||||||
while(lists.length){
|
while(lists.length){
|
||||||
var name = lists.shift(); //当前匹配词
|
let name = lists.shift(); //当前匹配词
|
||||||
var items = []; //当前匹配词可能性
|
let items = []; //当前匹配词可能性
|
||||||
var x_items = [];
|
let x_items = [];
|
||||||
var r_items = [];
|
let r_items = [];
|
||||||
var i_items = [];
|
let i_items = [];
|
||||||
var keywords = [name];
|
let keywords = [name];
|
||||||
var getList = function(name){
|
let getList = function(name){
|
||||||
// 词义扩展
|
// 词义扩展
|
||||||
_replace.forEach(item => {
|
_replace.forEach(item => {
|
||||||
item['arr'].forEach(word =>{
|
item['arr'].forEach(word =>{
|
||||||
var name1 = name.replace(item['exp'],word);
|
let name1 = name.replace(item['exp'],word);
|
||||||
if(name1!=name){
|
if(name1!=name){
|
||||||
keywords.push(name1);
|
keywords.push(name1);
|
||||||
getList(name1);
|
getList(name1);
|
||||||
@ -109,9 +109,9 @@ export function getSelectors(str){
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
// 同义词替换
|
// 同义词替换
|
||||||
for(var word in _similar){
|
for(let word in _similar){
|
||||||
var name1 = name.replace(word,_similar[word]);
|
let name1 = name.replace(word,_similar[word]);
|
||||||
var name2 = name.replace(_similar[word],word);
|
let name2 = name.replace(_similar[word],word);
|
||||||
if(name1!=name){
|
if(name1!=name){
|
||||||
keywords.push(name1);
|
keywords.push(name1);
|
||||||
}
|
}
|
||||||
@ -123,29 +123,29 @@ export function getSelectors(str){
|
|||||||
getList(name);
|
getList(name);
|
||||||
// 通过关键词找关系
|
// 通过关键词找关系
|
||||||
keywords.forEach(function(name){
|
keywords.forEach(function(name){
|
||||||
var match = name.match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
|
let match = name.match(/^[大|小]|^[一|二|三|四|五|六|七|八|九|十]+/);
|
||||||
if(match){
|
if(match){
|
||||||
var x_name = name.replace(match[0],'几');
|
let x_name = name.replace(match[0],'几');
|
||||||
var r_name = name.replace(match[0],'');
|
let r_name = name.replace(match[0],'');
|
||||||
var num = zh2number(match[0]);
|
let num = zh2number(match[0]);
|
||||||
var x_ids = _cache[x_name]||[];
|
let x_ids = _cache[x_name]||[];
|
||||||
var r_ids = _cache[r_name]||[];
|
let r_ids = _cache[r_name]||[];
|
||||||
var i_ids = _cache[name]||[];
|
let i_ids = _cache[name]||[];
|
||||||
if(x_ids.length){
|
if(x_ids.length){
|
||||||
x_ids.forEach(function(i){
|
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);
|
x_items.push(r_i);
|
||||||
});
|
});
|
||||||
}else if(r_ids.length){
|
}else if(r_ids.length){
|
||||||
r_ids.forEach(function(i){
|
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(/^[从世]/)){ // 直系祖辈不参与排序
|
if(!i.match(/^[mf,]+$/)&&!r_name.match(/^[从世]/)){ // 直系祖辈不参与排序
|
||||||
r_items.push(r_i);
|
r_items.push(r_i);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
i_ids.forEach(function(i){
|
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);
|
i_items.push(r_i);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ export function getSelectors(str){
|
|||||||
if(!items.length){
|
if(!items.length){
|
||||||
isMatch = false;
|
isMatch = false;
|
||||||
}
|
}
|
||||||
var res = [];
|
let res = [];
|
||||||
if(!result.length){
|
if(!result.length){
|
||||||
result = [''];
|
result = [''];
|
||||||
}
|
}
|
||||||
@ -183,10 +183,10 @@ export function getSelectors(str){
|
|||||||
|
|
||||||
// 合并选择器,查找两个对象之间的关系
|
// 合并选择器,查找两个对象之间的关系
|
||||||
export function mergeSelector(param){
|
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){
|
if(my_sex<0){
|
||||||
var to_sex = -1;
|
let to_sex = -1;
|
||||||
var from_sex = -1;
|
let from_sex = -1;
|
||||||
if(from_selector.match(/^,[w1]/)){
|
if(from_selector.match(/^,[w1]/)){
|
||||||
from_sex = 1;
|
from_sex = 1;
|
||||||
}else if(from_selector.match(/^,[h0]/)){
|
}else if(from_selector.match(/^,[h0]/)){
|
||||||
@ -207,16 +207,16 @@ export function mergeSelector(param){
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var from_ids = selector2id(param['from'],my_sex);
|
let from_ids = selector2id(param['from'],my_sex);
|
||||||
var to_ids = selector2id(param['to'],my_sex);
|
let to_ids = selector2id(param['to'],my_sex);
|
||||||
if(!from_ids.length||!to_ids.length){
|
if(!from_ids.length||!to_ids.length){
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
var result = [];
|
let result = [];
|
||||||
from_ids.forEach(function(from){
|
from_ids.forEach(function(from){
|
||||||
to_ids.forEach(function(to){
|
to_ids.forEach(function(to){
|
||||||
var sex = my_sex;
|
let sex = my_sex;
|
||||||
var selector = ','+to;
|
let selector = ','+to;
|
||||||
if(selector.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/)){
|
if(selector.match(/,([fhs1](&[ol\d]+)?|[olx]b)(&[ol\d]+)?$/)){
|
||||||
sex = 1;
|
sex = 1;
|
||||||
}
|
}
|
||||||
@ -224,12 +224,12 @@ export function mergeSelector(param){
|
|||||||
sex = 0;
|
sex = 0;
|
||||||
}
|
}
|
||||||
if(from&&to){
|
if(from&&to){
|
||||||
var isOptimal = param.optimal;
|
let isOptimal = param.optimal;
|
||||||
if(from.match(/&\d+/)||to.match(/&\d+/)){
|
if(from.match(/&\d+/)||to.match(/&\d+/)){
|
||||||
isOptimal = true;
|
isOptimal = true;
|
||||||
}
|
}
|
||||||
if(isOptimal){
|
if(isOptimal){
|
||||||
var ops = getOptimal({
|
let ops = getOptimal({
|
||||||
'from':from,
|
'from':from,
|
||||||
'to':to,
|
'to':to,
|
||||||
'sex':my_sex,
|
'sex':my_sex,
|
||||||
@ -240,9 +240,9 @@ export function mergeSelector(param){
|
|||||||
my_sex = ops['sex'];
|
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){
|
to_rids.forEach(function(to_r){
|
||||||
var selector = (to_r?','+to_r:'')+(from?','+from:'');
|
let selector = (to_r?','+to_r:'')+(from?','+from:'');
|
||||||
result.push({
|
result.push({
|
||||||
'selector':selector,
|
'selector':selector,
|
||||||
'sex':sex
|
'sex':sex
|
||||||
@ -255,15 +255,15 @@ export function mergeSelector(param){
|
|||||||
|
|
||||||
// 扩展选择器
|
// 扩展选择器
|
||||||
export function expandSelector(selector){
|
export function expandSelector(selector){
|
||||||
var result = [];
|
let result = [];
|
||||||
var hash = {};
|
let hash = {};
|
||||||
var getSelector = function(selector){
|
let getSelector = function(selector){
|
||||||
var s='';
|
let s='';
|
||||||
if(!hash[selector]){
|
if(!hash[selector]){
|
||||||
hash[selector] = true;
|
hash[selector] = true;
|
||||||
do{
|
do{
|
||||||
s = selector;
|
s = selector;
|
||||||
for(var item of _filter){
|
for(let item of _filter){
|
||||||
// console.log('[filter]',item['exp'],selector);
|
// console.log('[filter]',item['exp'],selector);
|
||||||
selector = selector.replace(item['exp'],item['str']);
|
selector = selector.replace(item['exp'],item['str']);
|
||||||
if(selector.includes('#')){
|
if(selector.includes('#')){
|
||||||
@ -305,7 +305,7 @@ export function selector2id(selector,sex){
|
|||||||
if(selector.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/)){ //同志关系去除
|
if(selector.match(/,[mwd0](&[ol\d]+)?,w|,[hfs1](&[ol\d]+)?,h/)){ //同志关系去除
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
var result = expandSelector(selector).map(function(selector){
|
let result = expandSelector(selector).map(function(selector){
|
||||||
return selector.replace(/,[01]/,'').substr(1); //去前面逗号和性别信息
|
return selector.replace(/,[01]/,'').substr(1); //去前面逗号和性别信息
|
||||||
});
|
});
|
||||||
return filterId(result);
|
return filterId(result);
|
||||||
|
@ -2,16 +2,16 @@
|
|||||||
* 数值转换
|
* 数值转换
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var textAttr = ['','一','二','三','四','五','六','七','八','九','十'];
|
const textAttr = ['','一','二','三','四','五','六','七','八','九','十'];
|
||||||
|
|
||||||
// 中文数字转阿拉伯数字
|
// 中文数字转阿拉伯数字
|
||||||
export function zh2number(text){
|
export function zh2number(text){
|
||||||
var num = 0;
|
let num = 0;
|
||||||
var map = {'大':1,'小':99};
|
const map = {'大':1,'小':99};
|
||||||
if(map[text]){
|
if(map[text]){
|
||||||
num = map[text];
|
num = map[text];
|
||||||
}else{
|
}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;
|
num = dec*10+unit;
|
||||||
}
|
}
|
||||||
return num;
|
return num;
|
||||||
@ -19,13 +19,13 @@ export function zh2number(text){
|
|||||||
|
|
||||||
// 阿拉伯数字转中文数字
|
// 阿拉伯数字转中文数字
|
||||||
export function number2zh(num){
|
export function number2zh(num){
|
||||||
var text = '';
|
let text = '';
|
||||||
var map = {1:'大',99:'小'};
|
const map = {1:'大',99:'小'};
|
||||||
if(map[num]){
|
if(map[num]){
|
||||||
text = map[num];
|
text = map[num];
|
||||||
}else{
|
}else{
|
||||||
var dec = ~~(num/10);
|
let dec = ~~(num/10);
|
||||||
var unit = num%10;
|
let unit = num%10;
|
||||||
text = (dec?(textAttr[dec]+'十').replace('一十','十'):'')+textAttr[unit];
|
text = (dec?(textAttr[dec]+'十').replace('一十','十'):'')+textAttr[unit];
|
||||||
}
|
}
|
||||||
return text;
|
return text;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user