# 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 }