updated bug修复及精简部分代码

This commit is contained in:
PASSER-BY 2021-11-24 23:26:38 +08:00
parent 063f4f231f
commit a5f06ac144
2 changed files with 74 additions and 93 deletions

File diff suppressed because one or more lines are too long

View File

@ -197,6 +197,8 @@
'[xb|xs]':['兄弟姐妹','同胞','手足'], '[xb|xs]':['兄弟姐妹','同胞','手足'],
'[f,xb,s&o|f,xb,s&l]':['堂兄弟'], '[f,xb,s&o|f,xb,s&l]':['堂兄弟'],
'[f,xb,d&o|f,xb,d&l]':['堂姐妹'], '[f,xb,d&o|f,xb,d&l]':['堂姐妹'],
'[m,xs,s&o|m,xs,s&l]':['姨兄弟'],
'[m,xs,d&o|m,xs,d&l]':['姨姐妹'],
'[f,xs,s&o|f,xs,s&l|m,xb,s&o|m,xb,s&l]':['表兄弟'], '[f,xs,s&o|f,xs,s&l|m,xb,s&o|m,xb,s&l]':['表兄弟'],
'[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]':['表姐妹'], '[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]':['表姐妹'],
'[s|d]':['子女','儿女','小孩','孩子','孩儿','宝宝','娃'], '[s|d]':['子女','儿女','小孩','孩子','孩儿','宝宝','娃'],
@ -2284,16 +2286,14 @@
function selector2id(selector,sex){ function selector2id(selector,sex){
var result = []; var result = [];
var hash = {}; var hash = {};
if(sex<0){ //性别判断
if(selector.indexOf(',w')==0){ if(sex<0){
selector = ',1'+selector; sex = selector.match(/^,w/)?1:0;
}else if(selector.indexOf(',h')==0){ }
selector = ',0'+selector; sex = sex?1:0;
} if(selector.indexOf(',1')==-1&&selector.indexOf(',0')==-1){
}else if(selector.indexOf(',1')==0||selector.indexOf(',0')==0){
}else if(sex>-1){
selector = ','+sex+selector; selector = ','+sex+selector;
} }
// console.log('[selector]',selector); // console.log('[selector]',selector);
if(selector.match(/,[w0],w|,[h1],h/)){ //同志关系去除 if(selector.match(/,[w0],w|,[h1],h/)){ //同志关系去除
return false; return false;
@ -2402,7 +2402,11 @@
} }
if(id){ if(id){
id = id.replace(/&[ol]/g,''); id = id.replace(/&[ol]/g,'');
sex = sex?1:0; //逆转运算自身性别必须确定 //性别判断
if(sex<0){
sex = id.match(/^w/)?1:0;
}
sex = sex?1:0;
var sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0'); var sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
sid = sid.substring(0,sid.lastIndexOf(',')); sid = sid.substring(0,sid.lastIndexOf(','));
var id_arr = id.split(',').reverse(); var id_arr = id.split(',').reverse();
@ -2412,12 +2416,9 @@
arr.push(hash[id_arr[i]][sid_arr[i]]); arr.push(hash[id_arr[i]][sid_arr[i]]);
} }
var g = 0; var g = 0;
var gMap = {'f':1,'m':1,'s':-1,'d':-1};
arr.forEach(function(r){ arr.forEach(function(r){
if(['f','m'].indexOf(r)>-1){ g += gMap[r]||0;
g++;
}else if(['s','d'].indexOf(r)>-1){
g--;
}
}); });
return arr.join(',')+(g?'':age); return arr.join(',')+(g?'':age);
} }
@ -2427,12 +2428,10 @@
// 通过ID获取关系链条 // 通过ID获取关系链条
function getChainById(id){ function getChainById(id){
var arr = id.split(','); var arr = id.split(',');
var items = []; return arr.map(function(sign){
for(var i = 0;i<arr.length;i++){ var key = sign.replace(/&[ol]/,'');
var key = arr[i].replace(/&[ol]/,''); return _data[key][0];
items.push(_data[key][0]); }).join('的');
}
return items.join('的');
} }
// 合并选择器,查找两个对象之间的关系 // 合并选择器,查找两个对象之间的关系
@ -2440,40 +2439,26 @@
var Index = 0; var Index = 0;
var from_arr = from.split(','); var from_arr = from.split(',');
var to_arr = to.split(','); var to_arr = to.split(',');
var mid_sex = -1;
var sex = -1;
var reg_sex = /([fhs1](&[ol])?|[olx]b)/;
for(var i=0;i<from_arr.length&&i<to_arr.length;i++){ for(var i=0;i<from_arr.length&&i<to_arr.length;i++){
if(from_arr[i]!=to_arr[i]){ if(from_arr[i]!=to_arr[i]){
break; break;
} }
} }
var mid_sex = -1; if(to_arr[i-1]){
if(to_arr[i-1]){ mid_sex = to_arr[i-1].match(reg_sex)?1:0;
if(to_arr[i-1].match(/([fhs1](&[ol])?|[olx]b)$/)){ }
mid_sex=1; if(to_arr[to_arr.length-1]){
}else{ sex = to_arr[to_arr.length-1].match(reg_sex)?1:0;
mid_sex=0; }
} var from_sub = from_arr.slice(i).join(',');
} var to_sub = to_arr.slice(i).join(',');
var sex = -1; return {
if(to){ 'selector':(to_sub?','+reverseId(to_sub,mid_sex):'')+(from_sub?','+from_sub:''),
if(to.match(/,([fhs1](&[ol])?|[olx]b)$/)){ 'sex':sex
sex=1; };
}else{
sex=0;
}
}
if(i){
var from_sub = from_arr.slice(i).join(',');
var to_sub = to_arr.slice(i).join(',');
return {
'selector':(to_sub?','+reverseId(to_sub,mid_sex):'')+(from_sub?','+from_sub:''),
'sex':sex
};
}else{
return {
'selector':from,
'sex':sex
};
}
} }
var relationship = function (parameter){ var relationship = function (parameter){
@ -2483,19 +2468,14 @@
sex:-1, sex:-1,
type:'default', // 'chain'表示关系链 type:'default', // 'chain'表示关系链
reverse:false, // true表示反向 reverse:false, // true表示反向
mode:'default', // 'cantonese'表示粤语地区 mode:'default', // 用户自定义模式
},parameter); },parameter);
var sex = options.sex; var sex = options.sex;
_data = Object.assign({},_map);
for(var lang in _mode){ for(var lang in _mode){
if(options.mode==lang){ if(options.mode==lang){
for(var key in _mode[lang]){ for(var key in _mode[lang]){
_data[key] = _mode[lang][key].concat(_map[key]||[]); _data[key] = [].concat(_mode[lang][key],_map[key]||[]);
}
}else{
for(var key in _mode[lang]){
if(_map[key]){
_data[key] = _map[key].concat(_mode[lang][key]);
}
} }
} }
} }
@ -2506,38 +2486,39 @@
from_selectors.forEach(function(from){ from_selectors.forEach(function(from){
to_selectors.forEach(function(to){ to_selectors.forEach(function(to){
var data = mergeSelector(from,to); var data = mergeSelector(from,to);
// console.log('[data]',data); // console.log('[data]',data);
sex = data['sex']>-1?data['sex']:options.sex; sex = data['sex']>-1?data['sex']:options.sex;
var ids = selector2id(data['selector'],sex); var ids = selector2id(data['selector'],sex);
// console.log('[ids]',ids); // console.log('[ids]',data['selector'],sex,ids);
for(var j=0;j<ids.length;j++){ if(ids){
var id = ids[j]; ids.forEach(function(id){
if(options.type=='chain'){ if(options.type=='chain'){
if(options.reverse){ if(options.reverse){
id = reverseId(id,sex); id = reverseId(id,sex);
} }
var item = getChainById(id); var item = getChainById(id);
if(item){ if(item){
result.push(item); result.push(item);
} }
}else{ }else{
if(options.reverse){ if(options.reverse){
id = reverseId(id,sex); id = reverseId(id,sex);
} }
var items = getDataById(sex+','+id); var items = getDataById(sex+','+id);
if(!items.length){ if(!items.length){
items = getDataById(id); items = getDataById(id);
} }
if(!items.length){ if(!items.length){
if(id.indexOf('w')==0||id.indexOf('h')==0){ //找不到关系,随爱人叫 if(id.indexOf('w')==0||id.indexOf('h')==0){ //找不到关系,随爱人叫
items = getDataById(id.substr(2)); items = getDataById(id.substr(2));
} }
} }
if(items.length){ if(items.length){
result = result.concat(items); result = result.concat(items);
} }
} }
} });
}
}); });
}); });
return unique(result); return unique(result);