Vue 原理 - 简单模板替换

博客分类: 江河计划

Vue 原理 - 简单模板替换

算法

找零问题

动态规划

将问题拆分成小问题,寻求答案

const coinsType = [1,5,10,20,50,100]
const MinConinChange = (coins:number, index?:number) => {
    if(index === undefined){
        index = coinsType.length - 1;
    }
    if(index < 0 || coins < 0){
        return;
    }
    var nowCoin = coinsType[index];
    var num = Math.floor(coins / nowCoin);
    if(num){
        console.log(num + '个' + nowCoin + '块');
    }
    var remain = coins - num * nowCoin;
    remain && MinConinChange(remain, --index);
}
MinConinChange(11384)

贪心算法

期盼通过每个阶段的局部最优选择(当前最好的解),从而达到全局的最优(全局最优)

const coinsType = [1,5,10,20,50,100]
const MinConinChange = (coins:number) => {
    var total = 0;
    for(var i = coinsType.length; i--;){
        var coin = coinsType[i];
        var num = 0;
        while(total + coin < coins){
            ++num;
            total += coin;
        }
        num && console.log(num + '个' + coin + '块');
    }
}
MinConinChange(11384)

正则

var tmp = `aaa
<color:xxx>
    <bold:zzz>
        aaaa
    </bold>
</color>
ssss
<color:yyy>
    bbb
</color>
mmm
<bold:zzz>
    ccc
</bold>`;
const filterStr = (str: string) => {
    var special = ['color', 'bold'];
    var format = ['color', 'font-weight']
    special.map((item, index) => {
        var reg = new RegExp(`<${item}:(.*?)>([\\w\\W]*?)</${item}>`, 'g');
        str = str.replace(reg, ($0, $1, $2) => {
            return `<div style="${format[index]}:${$1}">${$2}</div>`;
        });
    });
    return str;
}
console.log(filterStr(tmp))