字符串补全长度(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
};