字符串常用的函数(持续更新中...)

112 阅读1分钟

1.将url解析为对象

let url = "http://www.baidu.com?userName=join&age=24&city=%E5%8C%97%E4%BA%AC&score=66&score=99"
    
    /* 结果
        {
          userName: 'join',
          score: [ 66, 99 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型
          city: '北京', // 中文需解码
          age: 24, 
        }
    */
    function changeUrlObject(url) {
        let obj = {}
        let str = url.slice(url.indexOf('?') + 1)//截取问号之后的字符串
        let arr = str.split('&')//
        arr.forEach((item, index) => {
            let [key, value] = item.split('=')
            value = decodeURIComponent(value); // 解码
            value = /^\d+$/.test(value) ? parseFloat(value) : value; // 判断是否转为数字
            if (!obj.hasOwnProperty(key)) {
                obj[key] = value
            } else {
                obj[key] = [].concat(obj[key], value)
            }
        })
        return obj
    }
    console.log(changeUrlObject(url))

2.模板引擎实现

    let sourceData = {
        'userName': '张三',
        'age': '20',
        'type': '大学',
        'content': { 'price': '302510', 'date': '20200317', 'time': '191800' }
    }
    let resultData = [        {            'res': "date;time;姓名:indexName;年龄:age;学历:type;工资:price;"        }    ]
    let res = resultData[0].res
    let content = sourceData.content
    const reg = new RegExp(/\w+/g)

    const str = res.match(reg)
    for (let i = 0; i < str.length; i++) {
        for (key in sourceData) {
            if (key === str[i]) {
                res = res.replace(str[i], sourceData[key])
            }
        }
        for (key in content) {
            if (key === str[i]) {
                res = res.replace(str[i], content[key])
            }
        }
    }
    console.log(res)  //20200317;191800;姓名:张三;年龄:20;学历:大学;工资:302510;

3.转化为驼峰命名

   let str = 'hello-world-shy';
   function changeCase(str) {
       return str.replace(/\-\w/g, (params) => {
           return params.slice(1).toUpperCase()
       })
   }
   console.log(changeCase(str))

4.驼峰命名转换为带'-'格式

let str = 'helloWorldShy';
function changeCase(str) {
    return str.replace(/[A-Z]/g, (params) => {
        return `-${params.toLowerCase()}`
    })
}
console.log(changeCase(str))

5.查找字符串中出现最多的字符和个数

   let str = 'xbuhfsdfoasfabdfsiatabzdhr';
   function getMoreStr(str) {
       let num = 0;
       let chart = '';
       let sortStr = str.split('').sort().join('')  //先把数据变成数组,在按照ASCII排序,在转成字符串
       let re = /(\w)\1+/g;
       sortStr.replace(re, ($0, $1) => {
           console.log($0,$1)
           if (num < $0.length) { //某个字符串出现次数最多
               num = $0.length;
               chart = $1;
           }else if (num === $0.length) { //两个字符串出现最多次数相同时
               num = $0.length;
               chart = [].concat(chart,$1).join(',');
           }
       })
       return {chart,num}
   }
   console.log(getMoreStr(str)) //{'a,f',4}

6.每一个字符串出现的次数

    let str = 'xbuhfsdfoasfabdfsiatabzdhr';

    function changeChartNum(str) {
        let sortArr = str.split('').sort()  //先把数据变成数组,在按照ASCII排序
        let obj = sortArr.reduce((params, key) => {
            if (params[key] === undefined) {
                params[key] = 1
            } else {
                key = params[key]++
            }
            return params
        }, {})
    }
    console.log(changeChartNum(str)) 
 /*   {
        a: 4,
        b: 3,
        d: 3,
        f: 4,
        h: 2,
        i: 1,
        o: 1,
        r: 1,
        s: 3,
        t: 1,
        u: 1,
        x: 1,
        z: 1,
    } */

7.字符串查找(A字符串在B字符串中的位置)

    let strA = 'world';
    let strB = 'hello world';

    function stringIndex(a, b) {
        for (let i in b) {
            if (a[0] === b[i]) {
                let flag = true;
                for (let j in a) {
                    if (a[j] !== b[Number(i)+Number(j)]) {
                        flag = false
                    }
                }
                if (flag) {
                    return i
                }
            }
        }
        return -1
    }
    console.log(stringIndex(strA, strB))   //6

8.实现千位分隔符(及小数位数)

    let str = '1234567.1'
    let str2 = '1234567'
    let str3 = '1234567.890'
    function toMoney(num, len) {
        if (typeof num != 'number') {
            num = Number(num)
        }
        console.log(typeof num)
        num = parseFloat(num.toFixed(len))
        let [integer, decimal] = String.prototype.split.call(num, '.')
        integer = integer.replace(/\d(?=(\d{3})+$)/g, '$&,');
        return integer + '.' + (decimal ? len > decimal?.length ? decimal + Array(len + 1 - decimal.length).join(0) : decimal : Array(len + 1).join(0));//位数不够补零

    }
     console.log(toMoney(str, 2))   //1,234,567.10
     console.log(toMoney(str2, 2))  //1,234,567.00
     console.log(toMoney(str3, 2))  //1,234,567.89

9.去掉字符串中的空白符

let str = '    hello  world    ';
去除所有空格:
console.log(str.replace(/\s+/g, ""))         //helloworld
去除两头空格:
console.log(str.replace(/^\s+|\s+$/g, ""))   //hello  world
去除左空格:
console.log(str.replace(/^\s*/, ''))         //hello  world    
去除右空格:
console.log(str.replace(/(\s*$)/g, ""))      //    hello  world

题干参考:www.cnblogs.com/duxinyi/p/1…