前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >去除字符串乱码和 不用循环给数组赋值 自有的时间调度器

去除字符串乱码和 不用循环给数组赋值 自有的时间调度器

作者头像
河湾欢儿
发布2020-06-02 15:01:32
1.5K0
发布2020-06-02 15:01:32
举报

一、用正则表达式来将字符串I?���love�??�the�?great�?�?wall�in��?beijing更改为:I love the Great Wall in Beijing,主要是为了解决编码的问题导致的问题,规律:

1.乱码只有两种特殊字符分别是?和�; 2.如果乱码的末尾是?则它的下一位字母肯定是大写;、

代码语言:javascript
复制
var str = "I?���love�??�the�?great�?�?wall�in��?beijing"
str = str.replace(/�/g,'')//去掉乱码符号
strArr = str.split("?")//截取成数组
for(var i=0 ;i<strArr.length;i++){//循环数组并把首字母改成大写并拼接
  strArr[i]=strArr[i].charAt(0).toUpperCase()+strArr[i].slice(1)
}
strArr = strArr.join("")//数组转字符串
console.log(strArr)

二、不使用类似for,while循环控制语句和js本身自带方法(如:forEach)的情况下,实现将一个空数组[]赋值成[0,2,4,6,8,*****************]范围0-100便可。

代码语言:javascript
复制
var List = []//空数组
var sum = 0//基础值
function sumNumber(){
  if(sum < 101)//如果小于101的时候则一直执行这个方法 反之
     List.push(sum)  //添加
     sum+=2  //每次加2
     sumNumber() //自执行
   }
}
sumNumber()//初始调用

三、设计一个自由可灵活配置的时间调度器,有a,b,c,d...很多个需要被调度的方法(方法名称的命名可随意),调度有两种形式,一个是顺序调用(例如调度完a后才能调度b),一个是间隔某个时间进行循环调度。用一个统一的方法进行封装可以实现下列的例子:

1.可以为5秒后调用a,3秒后调用b,7秒后调用c。d...z方法不执行(不执行的方法可以设计成不传递参数),那么在第14秒的时候开始重新从0秒循环,又变成5秒后调用a,3秒后调用b,7秒后调用c,这样循环往复; 2.每间隔6秒调用一次a,每间隔4秒调用一次b,c...z方法不执行; 第一秒先执行a,3秒后执行b,但是c却是每间隔3秒执行一次,d是每间隔4秒执行一次,a和b是每4秒进行一次循环; 3.a不执行,b和c每间隔3秒执行一次,d不执行;

代码语言:javascript
复制
class TimeScheduler {
    constructor() {
        this.events = [];
        this.orderCallStack = [];
        this.ownCallStack = [];
    }
    //添加执行栈函数,orderExec用于区别是顺序调用还是独立调用,注意同一个函数存在顺序调用和独立调用时需要add两次
    add(fn = () => {}, orderExec = false, timeout = 3) {
        let fnc;
        if (orderExec) {
            fnc = () => {
                setTimeout(() => {
                    fn();
                    this.next();
                }, timeout * 1000)
            };
        } else {
            fnc = () => {
                setInterval(() => {
                    fn()
                }, timeout * 1000)
            };
        }
        this.events.push({
            fnc,
            orderExec
        })
    }
    remove(fnc = () => {}) {
        this.events = this.events.filter(item => item.fnc === fnc);
    }
    clear() { //清除存储数据及清空调用栈
        this.events = [];
        this.orderCallStack.forEach(item => {
            clearTimeout(item.fnc);
        });
        this.ownCallStack.forEach(item => {
            clearInterval(item.fnc);
        });
        this.ownCallStack = [];
        this.orderCallStack = [];
    }
    start() { //开始执行
        this.orderCallStack = this.events.filter(item => !!item.orderExec);
        this.ownCallStack = this.events.filter(item => !item.orderExec);
        this.ownCallStack.forEach(item => item.fnc());
        this.next();
    }
    stop() { //停止执行
        this.orderCallStack.forEach(item => {
            clearTimeout(item.fnc);
        });
        this.ownCallStack.forEach(item => {
            clearInterval(item.fnc);
        });
        this.ownCallStack = [];
        this.orderCallStack = [];
    }
    next() { //顺序调用栈执行函数
        let obj = this.orderCallStack.shift() || {};
        if (obj.fnc) {
            this.orderCallStack.push(obj);
            obj.fnc();
        }
    }
}

let a = () => {
    console.log("a");
}
let b = () => {
    console.log("b");
}
let c = () => {
    console.log("c");
}
const timeScheduler1 = new TimeScheduler();
timeScheduler1.add(a, true, 5);
timeScheduler1.add(b, true, 3);
timeScheduler1.add(c, true, 7);
timeScheduler1.start();
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档