截取相同字节长度的字符串

做这个主要是为了在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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值