做这个主要是为了在echarts图的xy轴上实现溢出隐藏并省略的作用。
一个中文字符=2字节 例:abs
一个英文字符=1字节 例:可视化
相同字符长度对应的实际长度是不一样的,不能用简单的substring取出相同物理长度的字符串·
例:取8字节长度字符串
思路
首先添加string原型方法(这个是从别人那引用的不知道谁是原创)
String.prototype.getBytes = function() { //获取字节数。中文4个字对应8个字符英文
var cArr = this.match(/[^\x00-\xff]/ig);
return this.length + (cArr == null ? 0 : cArr.length);
}
具体实现
formatter:(value)=>{
let v,blen=value.getBytes(),t=0,ind=0;
if(value.length==blen){ //英文,一个字母1字节
v = value.substring(0, 8) + '...'
}else if(2*value.length==blen){ //中文,一个字2字节
v = value.substring(0, 4) + '...'
}else{ //中英文混合,你也可以直接只用这步
let str = (value)=>{
let arr = value.split(''); //分割字符串
for(let i=0;i<arr.length;i++){
t+=arr[i].getBytes();
ind++;
if(t>=8){
return value.substring(0,ind) + '...';
}
}
}
v = str(value)
}
return blen > 11 ? v : value
}
简化一下
formatter:(value)=>{
let v,blen=value.getBytes(),t=0,ind=0;
if(blen>11){
let str = (value)=>{
let arr = value.split('');
for(let i=0;i<arr.length;i++){
t+=arr[i].getBytes();
ind++;
if(t>=8){
return value.substring(0,ind) + '...';
}
}
}
v = str(value)
}
return blen > 11 ? v : value
}