EngineUtils.js 6.2 KB
/**
 * Created by hoopoe8 on 2017/1/8.
 */
import Base64 from 'base64-js';
import UTF8 from 'utf-8';

class EngineUtils{
    static isEmptyObject(O){
        for (var x in O){
            return false;
        }
        return true;
    }
    static arrayToJsonString(_param){
        try{
            return JSON.stringify(_param);
        }catch (err){
            console.warn("数组转JSON失败->ERROR:"+err.message);
        }
        return "";
    }
    static arrayFromJsonString(_param){
        try{
            return JSON.parse(_param);
        }catch (err){
            console.warn("JSON转数组失败->ERROR:"+err.message);
        }
        return [];
    }

    //生成时间戳后9位 保证唯一
    static creatSoleNumberFromTimestamp(){
        let time   = new Date().getTime();
        let timestamp= time % 1000000000;//time后9位
        return timestamp;
    }

    //生成时间戳毫秒
    static creatTimestamp(){
        let time   = parseInt(new Date().getTime()/1000);//精确到秒
        return time;
    }
    //生成时间戳 string
    static creatTimestampStr(){
        let curTime = new Date();
        let timeStr = "" + curTime.getFullYear() + "-";
        timeStr += (curTime.getMonth()+1) + "-";
        timeStr += curTime.getDate() + "-";
        timeStr+=curTime.getHours() + "-";
        timeStr+=curTime.getMinutes() + "-";
        timeStr+=curTime.getSeconds();
        return timeStr;
    }
    //根据时间戳字符串转换为时间戳  2017-10-27-15-38-15
    static getTimestampFromStr(_timeStr){
        if(!_timeStr) return this.creatTimestamp();
        let timeArr=_timeStr.split("_");
        if(timeArr&&timeArr.length==6){
            return parseInt( new Date(timeArr[0],parseInt(timeArr[1])-1,timeArr[2],timeArr[3],timeArr[4],timeArr[5]).getTime()/1000);
        }
        return this.creatTimestamp();
    }
    //生成时间戳  格式:"20170209"
    static creatTimestampYMD(){
        let curTime = new Date();
        let year = "" + curTime.getFullYear();
        let month = "" +(curTime.getMonth()+1);
        let day = "" + curTime.getDate();

        if(month.length<2){
            month="0"+month;
        }
        if(day.length<2){
            day="0"+day;
        }
        return year+month+day;
    }
    static objectToBase64(_object){
        try{
            let _objectStr=JSON.stringify(_object);
            //console.log("objectToBase64------1----------")
            let byte=UTF8.setBytesFromString(_objectStr);
            //console.log("objectToBase64------2----------")
            let _objectBase64=Base64.fromByteArray(byte);
            return _objectBase64
        }catch (err){
            console.log("objectToBase64 err:"+err.message);
            return "";
        }
        return ""
    }
    static objectFromBase64(_objectBase64){
        try{
            let byte=Base64.toByteArray(_objectBase64);
            let _objectStr=UTF8.getStringFromBytes(byte);
            let _object=JSON.parse(_objectStr);
            return _object
        }catch (err){
            console.log("objectFromBase64 err:"+err.message);
            return null;
        }
        return null;
    }
    //优化压缩坐标点数组,去除一些连续重复坐标的点,返回一个数组
    static compressPoint(_arr){
        if(!_arr){
            return [];
        }
        if(_arr.length<5){
            //点,直线,矩形 坐标点小于5不需要处理
            return _arr;
        }
        let tempPointArr=_arr;
        let newPointArr=[];
        newPointArr.push(tempPointArr[0]);
        let lastW=tempPointArr[0].w;
        let continueNum=0;//坐标相同的连续次数
        //先筛除水平方向的连续重复坐标点
        let len=tempPointArr.length-1;
        for(let i=1;i<len;i++){
            let item=tempPointArr[i];
            if(item&&item.w!=lastW){
                lastW=item.w;
                if(continueNum>0){
                    newPointArr.push(tempPointArr[i-1]);
                }
                newPointArr.push(item);
                continueNum=0;
            }else {
                continueNum++;
            }
        }
        //如果最终的坐标点数量小于2,需要把最后一个坐标点添加
        if(tempPointArr[len]){
            newPointArr.push(tempPointArr[len]);
        }
        //如果坐标点已经小于等于2不需要继续检测
        if(newPointArr.length<=2){
            return newPointArr;
        }

        //筛除水垂直向的连续重复坐标点
        let finalPointArr=[];
        finalPointArr.push(newPointArr[0]);
        let lastH=newPointArr[0].h;
        continueNum=0;
        len=newPointArr.length-1;
        for(let k=1;k<len;k++){
            let item=newPointArr[k];
            if(item&&item.h!=lastH){
                lastH=item.h;
                if(continueNum>0){
                    finalPointArr.push(newPointArr[k-1]);
                }
                finalPointArr.push(item);
                continueNum=0;
            }else {
                continueNum++;
            }
        }
        if(newPointArr[len]){
            finalPointArr.push(newPointArr[len]);
        }
        return finalPointArr;
    }
    //压缩数据,把坐标点数组转换为字符串,返回字符串
    static optimizePoint(_pointGroup){
        if(!_pointGroup){
            return "";
        }
        let tempStr="";
        try {
            tempStr=JSON.stringify(_pointGroup);
        }catch (err){
            return "";
        }
        let regexp1=/},{"w":/g;
        let regexp2=/,"h":/g;
        tempStr=tempStr.replace(regexp1,"#");
        tempStr=tempStr.replace(regexp2,"&");
        //console.log("标注压缩后的字符长度->",tempStr.length);
        return tempStr;
    }
    //把字符串坐标点集合转换为数组,返回数组的JSON
    static unPackOptimizePoint(_str){
        if(!_str){
            return "";
        }
        let tempStr=_str;
        let regexp1=/#/g;
        let regexp2=/&/g;
        tempStr=tempStr.replace(regexp1,'},{"w":');
        tempStr=tempStr.replace(regexp2,',"h":');

        let dataArr=[];
        try {
            dataArr=JSON.parse(tempStr);
        }catch (err){

        }
        return dataArr;
    }
}
export  default EngineUtils;