前端面试题前端工程小技巧

字符串补全长度(padStart)

2019-04-08  本文已影响0人  千茉紫依

题目:完成函数 centerPad 可以让一个字符串居中包裹在指定的可重复填充的字符串中间,例如:

centerPad('Hello', 13, 'abc') // => 'abcaHelloabca'
centerPad('Gook Luck!', 30, '*~') // => '*~*~*~*~*~Gook Luck!*~*~*~*~*~'
第一个参数为被包裹字符串,
第二个参数为最终的字符串长度,
第三个参数为用来填充的字符。

如果字符串无法完全居中,那么让字符串偏左,例如:

centerPad('Hello', 10, 'abc') // => 'abHelloabc'

答案:
看到这道题我是有思路的,分别算出左侧和右侧需要的字符数,然后通过while控制两侧字符生成

   我的答案:
   const centerPad = (str, len, pad) => {
        let strLen=str.length
        if(strLen>len) return str
        let leftLen= Math.floor((len-strLen)/2)
        let rLen=len-strLen-leftLen
        let leftArr=[],rArr=[]
        let padArr=[...pad]
        let padStr=0
        while(leftLen){
            if(padStr==padArr.length)
                padStr=0
            leftArr.push(padArr[padStr])
            leftLen--
            padStr++
        }
        padStr=0
        while(rLen){
            if(padStr==padArr.length)
                padStr=0
            rArr.push(padArr[padStr])
            rLen--
            padStr++
        }
        let r=leftArr.join('')+str+rArr.join('')
        console.log(r);
        return r
    }; 

看过参考答案,发现es2017发布了字符串补全长度的功能,padStart()用于头部补全,padEnd()用于尾部补全。第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串。例如:
'xxx'.padStart(9, 'abc') // 'abcabxxx
于是,就有了答案二,果然简洁许多,相比方案一,也没有思维难度

我的答案二:
    const centerPad = (str, len, pad) => {
        let strLen=str.length
        if(strLen>len) return str
        let leftLen= Math.floor((len-strLen)/2)
        let r=str.padStart(leftLen+strLen,pad)
        r=r.padEnd(len,pad)
        return r
    };

上一篇下一篇

猜你喜欢

热点阅读