本文为读 lodash 源码的第三百三十八篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
import castSlice from './.internal/castSlice.js'
import charsEndIndex from './.internal/charsEndIndex.js'
import charsStartIndex from './.internal/charsStartIndex.js'
import stringToArray from './.internal/stringToArray.js'
trim
用来去除字符串 string
前后两端指定的字符串 chars
,如果没有指定 chars
,则 chars
默认为空格,即效果和字符串的原生方法 trim
一样。
源码如下:
function trim(string, chars) {
if (string && chars === undefined) {
return string.trim()
}
if (!string || !chars) {
return (string || '')
}
const strSymbols = stringToArray(string)
const chrSymbols = stringToArray(chars)
const start = charsStartIndex(strSymbols, chrSymbols)
const end = charsEndIndex(strSymbols, chrSymbols) + 1
return castSlice(strSymbols, start, end).join('')
}
if (string && chars === undefined) {
return string.trim()
}
可以看到,chars
没传的时候,其实就是直接调用字符串的原生方法 trim
来移除前后两端的空格。
if (!string || !chars) {
return (string || '')
}
字符串或者 chars
为假值时,前后没字符可以移除,直接返回原字符串,如果原字符串为假值,则转换成空字符串。
const strSymbols = stringToArray(string)
const chrSymbols = stringToArray(chars)
const start = charsStartIndex(strSymbols, chrSymbols)
const end = charsEndIndex(strSymbols, chrSymbols) + 1
return castSlice(strSymbols, start, end).join('')
要移除前后在 chars
中的字符,只要找到前面第一个不在 chars
中的字符的位置,和后面第一个不在 chars
中字符的位置,将前后两个位置的字符截取出来即可。
这里先使用 stringToArray
将 string
和 chars
都转换成数组,再调用 charsStartIndex
找出前面第一个不在 chars
中字符的位置,调用 charsEndIndex
找出后面第一个不在 chars
中字符的位置。
再调用 castSlice
截取出这两个位置的字符,这里截取出来的是一个字符数组,再使用 join
来拼接成字符串。
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:
作者:对角另一面