# pickBy
# Description
创建一个对象,这个对象组成为从 object 中经 predicate 判断为真值的属性。 predicate 调用 2 个参数:(value, key)。
# Params
(object, predicate)
# Return
Object
# Depend
import map from './map.js'
import basePickBy from './.internal/basePickBy.js'
import getAllKeysIn from './.internal/getAllKeysIn.js'
# Code
function pickBy(object, predicate) {
if (object == null) {
return {}
}
const props = map(getAllKeysIn(object), (prop) => [prop])
return basePickBy(object, props, (value, path) => predicate(value, path[0]))
}
# Analyze
- 如果
object
为null
或者undefined
,返回空对象 - 使用
getAllKeysIn
获取object
所有可枚举属性,包括原型链上,包括symbol
,并使用map
将每个属性转换为数组,符合basePickBy
要求 - 使用
basePickBy
进行结果对象的生成,调用传入的predicate
函数,只不过会取出path
# Remark
# Example
const a = {
a: 1,
b: 2,
c: 3
}
console.log(pickBy(a, (value, path) => value > 1)) // { b: 2, c: 3 }