# createPadding
# Description
createPadding 其实也可以理解成 repeat 和 slice 的组合,它接收一个字符串 chars 和长度 length ,最终会返回一个长度为 length 的字符串。
如果 chars 的长度不足 length , 会重复 chars ,得到一个长度为 length 的字符串,如果 chars 的长度大于 length ,则会对 chars 进行截断。
# Params
(length, chars)
# Return
string
# Depend
import repeat from '../repeat.js'
import baseToString from './baseToString.js'
import castSlice from './castSlice.js'
import hasUnicode from './hasUnicode.js'
import stringSize from './stringSize.js'
import stringToArray from './stringToArray.js'
repeat 源码分析
baseToString 源码分析
castSlice 源码分析
hasUnicode 源码分析
stringSize 源码分析
stringToArray 源码分析
# Code
function createPadding(length, chars) {
chars = chars === undefined ? ' ' : baseToString(chars)
const charsLength = chars.length
if (charsLength < 2) {
return charsLength ? repeat(chars, length) : chars
}
const result = repeat(chars, Math.ceil(length / stringSize(chars)))
return hasUnicode(chars)
? castSlice(stringToArray(result), 0, length).join('')
: result.slice(0, length)
}
# Analyze
- 如果
chars
为undefined
,则将其转为 一个空格的字符串,否则 使用baseToString
进行转换 - 判断如果
charsLength
小于 2,也就是 0 或者 1,如果为 1,则调用repeat
进行拼接,否则 返回chars
- 使用
stringSize
获取chars
的长度,有可能包含unicode
,然后 使用length
除以获取到的长度,计算需要重复多少次,有可能有小数,所以使用Math.ceil
向上取整 - 最终返回结果
- 如果含有 unicode字符,则先使用
stringToArray
将其转为 数组,在使用castSlice
进行截取,最终在使用join
拼接成字符串返回 - 不含有 unicode字符,则直接使用
slice
截取即可 - unicode字符使用
slice
截取,可能会有乱码
- 如果含有 unicode字符,则先使用
createPadding
在不传入chars
时,会返回空格repeat
的结果
# Remark
- Math.ceil() MDN (opens new window) 函数返回大于或等于一个给定数字的最小整数
- String.prototype.slice() MDN (opens new window) 方法提取某个字符串的一部分,并返回一个新的字符串,且不会改动原字符串
# Example
console.log(createPadding(3) + '1') // ' 1'
console.log(createPadding(3, 'a') + '1') // 'aaa1'