整理了很多日常 JS 用到的小方法

1. JSON数据 转字符串

JSON.stringify(jsondata)

2. 字符串 转 JSON

JSON.parse(str)

3. Map 转 JSON,需要先将Map转化为Object(对象)

strMapToObj(strMap){
    let obj= Object.create(null);
    for (let[k,v] of strMap) {
      obj[k] = v;
    }
    return obj;
  }
  /**
  *map转换为json
  */
  mapToJson(map) {
  return JSON.stringify(this.strMapToObj(map));
  }

4. JSON 转 Map

objToStrMap(obj){
  let strMap = new Map();
  for (let k of Object.keys(obj)) {
    strMap.set(k,obj[k]);
  }
  return strMap;
}
 /**
  *json转换为map
  */
 jsonToMap(jsonStr){
    return this.objToStrMap(JSON.parse(jsonStr));
  }

5. 字符串处理工具

①. 字符串全部替换

/**
   * 字符替换
   * @param {String} str 
   * @param {String} origStr 原始串
   * @param {String} tarStr 目标串
   */
  replaceAll(str, origStr, tarStr) {
    return (str == null || str === '') ? '' : str.replace(new RegExp(origStr, "gm"), tarStr);
  }

②. 判断是不是一个数字 或者 一个字符串里全是数字

/**
     * 判断是不是一个数字 或者 一个字符串里全是数字
     */
    isNumber(value) {
        if (value === undefined || value === null || value === '') {
            return false
        }

        if (typeof (value) === 'string') {
            //正整数
            var reNumber = /^\d+$/
            //负整数
            var reNeNumber = /^-\d+$/
            //正实数
            var reRealNumber1 = /^[1-9]\d*[.]\d+$/  //非零开头
            var reRealNumber2 = /^0[.]\d+$/ //零开头
            //负实数
            var reNeRealNumber1 = /^-[1-9]\d*[.]\d+$/  //非零开头
            var reNeRealNumber2 = /^-0[.]\d+$/ //零开头

            if (reNumber.test(value) || reNeNumber.test(value)
                || reRealNumber1.test(value) || reRealNumber2.test(value)
                || reNeRealNumber1.test(value) || reNeRealNumber2.test(value)) {
                return true
            }
            else {
                return false
            }
        }
        else if (typeof (value) === 'number') {
            return true
        }
        else {
            return false
        }
    }

③. 判断字符串、对象、数组是否为空,数组长度是否为0,数值是否为0

/**
	 * 判断字符串、对象、数组是否为空,数组长度是否为0,数值是否为0
	 * @param {Object} obj
	 */
    isEmpty(obj) {
        if (typeof obj == null || obj == '' || obj == "undefined") {
   		     return true
        }
        if (typeof obj == 'number' && obj == 0) {
			return true
		}
        if (typeof obj == 'object' && (obj == '' || Object.keys(obj).length == 0)) {
			return true
		}
        if (Array.isArray(obj) && obj.length == 0) {
			return true
		}
        return false
    }

补充:

实际上 null 与 undefined 虽然不是东东,但是 JS 中规定,二者的值是相等的,只是类型不同

null == undefiend 	// true
null === undefined 	// false
function isEmptyStr(s) {
	if (s == null || s === '') {
		return true
	}
	return false
}

// 或
function isEmptyStr(s) {
	if (s == undefined || s === '') {
		return true
	}
	return false
}

判断不为空:

function isNotEmptyStr(s) {
	if (typeof s == 'string' && s.length > 0) {
        return true
	}
	return false
}

④字符串切割

const aa="2020-10-10T12:00:21"
console.log(aa.split("T")[0]) //T之前的字符串 结果为2020-10-10
console.log(aa.split("T")[1]) //T之后的字符串 结果为12:00:21

⑤. 字符串截取

  • slice()
  • substring()
  • substr()
var stmp = "rcinn.cn";
console.log(stmp.slice(3));//从第4个字符开始,截取到最后个字符;返回"nn.cn"
console.log(stmp.substring(3));//从第4个字符开始,截取到最后个字符;返回"nn.cn"

console.log(stmp.slice(1,5))//从第2个字符开始,到第5个字符;返回"cinn"
console.log(stmp.substring(1,5));//从第2个字符开始,到第5个字符;返回"cinn"

console.log(stmp.slice(0));//返回整个字符串
console.log(stmp.substring(0));//返回整个字符串

console.log(stmp.slice(0,1));//返回"r"
console.log(stmp.substring(0,1));//返回"r"

//在上面的例子中我们可以看出slice()和substring()的用法是相同的,返回的值也是一样的,但当参数为负数时,他们的返回值却不一样,看下面的例子
console.log(stmp.slice(2,-5));//返回"i"
console.log(stmp.substring(2,-5));//返回"rc"
 
/**
*从上面两个例子可以看出slice(2,-5)实际上是slice(2,3),负5加上字符串长度8转换成正3
*(若第一位数字等于或大于第二位数字(slice()注意:这里第二位数字如果是负数是加完字符串长度后的数字,而不是显示的数字
*例:length=11,(7,-6),-6+11=5第二位小于第一位),则返回空字符串);
*而substring(2,-5)实际上是substring(2,0),负数转换为0,substring总是把较小的数作为起始位置。
*/

console.log(stmp.substring(1,5))//从第2个字符开始,到第5个字符;返回"cinn"
console.log(stmp.substr(1,5));//从第2个字符开始,截取5个字符;返回"cinn."

⑥. 转数组

  • 使用 .split(‘’)
  • 使用 Array.from(str)
const str= 'The Office'
const arr= Array.from(str);

6. 生成唯一标识码

// 生成唯一标识码的两种方式
class Uid {
    guid(hasSplitLine = true) {
        function S4() {
            return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
        }
        return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
    }

    uuid(hasSplitLine = true) {
        var s = [];
        var hexDigits = "0123456789abcdef";
        for (var i = 0; i < 36; i++) {
            s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
        }
        s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
        s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
        s[8] = s[13] = s[18] = s[23] = "-";

        var uuid = s.join("");
        
        return uuid;
    }
}

export default new Uid()

7. 日期处理工具

①. 比较日期,与当日比较,小于0为过去日期,大于0为未来日期,等于0为当前日期

/**
   * 比较日期,与当日比较,小于0为过去日期,大于0为未来日期,等于0为当前日期
   */
    isCompareDate2CurDate(date) {
        let sDate = new Date(date)

        let td = new Date();
        let seperator1 = "-";
        let year = td.getFullYear();
        let month = td.getMonth() + 1;
        let strDate = td.getDate();
        if (month >= 1 && month <= 9) {
            month = "0" + month;
        }
        if (strDate >= 0 && strDate <= 9) {
            strDate = "0" + strDate;
        }
        let cDate = new Date(year + seperator1 + month + seperator1 + strDate);

        return sDate == cDate ? 0 : sDate > cDate ? 1 : -1
    }

②. 比较月份,与当前月比较,小于0为过去月份,大于0为未来月份,等于0为当前月份

/**
   * 比较月份,与当前月比较,小于0为过去月份,大于0为未来月份,等于0为当前月份
   */
    isCompareMonth2CurMonth(ym) {
        let sMonth = new Date(ym)
        let fm = sMonth.getMonth()

        let cMonth = new Date()
        let cm = cMonth.getMonth()

        return (sMonth.getFullYear() * 12 + fm) - (cMonth.getFullYear() * 12 + cm)
    }

③. 比较日期,与当日比较差值,小于单前日期返回负值,等于返回0,大于返回正值

/**
     * date参数格式为‘yyyy-MM-dd’
   * 比较日期,与当日比较差值,小于单前日期返回负值,等于返回0,大于返回正值
   */
    isDifference2CurDate(date) {
        let sDate = Date.parse(date)

        let td = new Date();
        let seperator1 = "-";
        let year = td.getFullYear();
        let month = td.getMonth() + 1;
        let strDate = td.getDate();
        if (month >= 1 && month <= 9) {
            month = "0" + month;
        }
        if (strDate >= 0 && strDate <= 9) {
            strDate = "0" + strDate;
        }
        let cDate = Date.parse(year + seperator1 + month + seperator1 + strDate);
        let dateSpan = sDate - cDate
        let iDays = Math.floor(dateSpan / (24 * 3600 * 1000))
        return iDays
    }

④. 使用‘-’分隔年月

/**
     * 使用‘-’分隔年月
     */
    getYM(month) {
        let strs = month.split('-');
        return strs
    }

⑤. 通过日期获取天,dateTime格式为‘yyyy-MM-dd 00:00:00’

/**
     * 通过日期获取天,dateTime格式为‘yyyy-MM-dd 00:00:00’
     */
    getDay4DateTime(dateTime) {
        let fIndex = dateTime.lastIndexOf('-')
        let lIndex = dateTime.indexOf(' ')
        let d = dateTime.substring(fIndex + 1, lIndex)
        return d.indexOf('0') == 0 ? d.substring(1) : d
    }

⑥. 获取当前日期,值返回yyyy-MM-dd

/**
     * 获取当前日期,值返回yyyy-MM-dd
     */
    getCurrentDate() {
        let date = new Date();
        let seperator1 = "-";
        let year = date.getFullYear();
        let month = date.getMonth() + 1;
        let strDate = date.getDate();
        if (month >= 1 && month <= 9) {
            month = "0" + month;
        }
        if (strDate >= 0 && strDate <= 9) {
            strDate = "0" + strDate;
        }
        let currentdate = year + seperator1 + month + seperator1 + strDate;
        return currentdate;
    }

⑦. 根据日期时间获取星期

getWeekText(dateTime) {
        // console.log(dateTime)
        let date = new Date(dateTime)
        let weekDay = date.getDay()
        // console.log(weekDay)
        switch (weekDay) {
            case 0: return '星期日';
            case 1: return '星期一';
            case 2: return '星期二';
            case 3: return '星期三';
            case 4: return '星期四';
            case 5: return '星期五';
            case 6: return '星期六';
            default: return '星期日'
        }
    }

⑧. 判断两个对象所有属性值是否相等

function isObjectValueEqual(a, b) {
    var aProps = Object.getOwnPropertyNames(a);
    var bProps = Object.getOwnPropertyNames(b);
    if (aProps.length != bProps.length) {
        return false;
    }
    for (var i = 0; i < aProps.length; i++) {
        var propName = aProps[i];
        if (a[propName] !== b[propName]) {
            return false;
        }
    }
    return true;
}

8. 字符串转为数字的方法

① ==>:使用Number()函数,将被转换类型放入括号内;\

  • 1、如果为纯数字的字符串,则直接将其转换为数字;
  • 2、如果字符串中有非数字的内容,则转换为NaN(not a number);
  • 3、如果字符串是空串或全是空格的字符串,则Number(‘’)或Number(" ")—>0
var s = "123";
s = Number(s);
// 查看变量类型
console.log(typeof s); //number
console.log(s);  //123

var s1 = "123a"
s1 = Number(s1);
console.log(s1); //NaN(not a number)

var s2 = "  ";
s2 = Number(s2);
console.log(s2);//0

②==>:

  • parseInt() 把一个字符串中有效整数内容取出
  • parseFloat() 把一个字符串有效的小数取出
var s3="123a";
        console.log(parseInt(s3)); //123

        var s4="123.23px";
        console.log(parseFloat(s4));// 123.23