pocket-lodash
pocket-lodash copied to clipboard
lodash源码分析之baseMatches
本文为读 lodash 源码的第三百五十二篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash
gitbook也会同步仓库的更新,gitbook地址:pocket-lodash
依赖
import baseIsMatch from './baseIsMatch.js'
import getMatchData from './getMatchData.js'
import matchesStrictComparable from './matchesStrictComparable.js'
《lodash源码分析之matchesStrictComparable》
源码分析
baseMatches 相当于 baseIsMatch 的偏函数。
源码如下:
function baseMatches(source) {
const matchData = getMatchData(source)
if (matchData.length === 1 && matchData[0][2]) {
return matchesStrictComparable(matchData[0][0], matchData[0][1])
}
return (object) => object === source || baseIsMatch(object, source, matchData)
}
调用 getMatchData 得到 source 的 [key, value] 组合数组。
如果 matchData 的长度只有 1 ,表明只有一个属性,并且 matchData[0][2] 为真值,则直接使用 matchesStrictComparable 创建一个比较函数。这样比使用 baseIsMatch 进行比较性能更加好。
否则返回一个函数,这个函数同样接收 object 作为参数,如果 object === source ,两者相等,肯定是匹配的,否则,调用 baseIsMathch 比较。
因此,本质上,baseMatches 就是 baseIsMatch 的偏函数。
License
署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)
最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见: 
作者:对角另一面