# basePickBy
# Description
pickBy的基本实现。
# pickBy
创建一个对象,这个对象组成为从 object 中经 predicate 判断为真值的属性。 predicate 调用 2 个参数:(value, key)。
# Params
(object, paths, predicate)
{Object} object - 源对象。
{string[]} paths - 属性路径选择。
{Function} predicate - 每个属性调用的函数。
# Return
Object
# Depend
import baseGet from './baseGet.js'
import baseSet from './baseSet.js'
import castPath from './castPath.js'
# Code
function basePickBy(object, paths, predicate) {
let index = -1
const length = paths.length
const result = {}
while (++index < length) {
const path = paths[index]
const value = baseGet(object, path)
if (predicate(value, path)) {
baseSet(result, castPath(path, object), value)
}
}
return result
}
# Analyze
- 初始化一个空对象
- while 循环 遍历
paths
,拿到对应的path
,调用baseGet
拿到object
上 对应path
的value
值 - 如果
value
和path
经过了predicate
函数的检验,返回值为真值,则使用baseSet
将path
和value
设置到result
对象中 - 这里会对
path
调用castPath
方法 做处理
# Remark
本质也就是 拿到值之后根据 predicate
函数判断,决定要不要将 value
设置到 result
中
# Example
const func = (value, path) => value != null && path != null
const a = {
a: 1,
b: 2,
c: 3,
d: {
e: 4
}
}
console.log(basePickBy(a, ['a', 'd'], func)) // { a: 1, d: { e: 4 } }
← basePick baseProperty →