# baseFindKey
# Description
findKey 和 findLastKey 等方法的基本实现,它们使用 eachFunc 遍历集合。
返回找到的 key 或者 索引,找不到返回 undefined。
# Params
(collection, predicate, eachFunc)
{Array|Object} collection
{Function} predicate - 每次迭代调用的函数
{Function} eachFunc - 遍历 collection 的函数
# Return
{*}
- 找到的 key 或者 undefined
# Code
function baseFindKey(collection, predicate, eachFunc) {
let result
eachFunc(collection, (value, key, collection) => {
if (predicate(value, key, collection)) {
result = key
return false
}
})
return result
}
# Analyze
- 调用传入的
eachFunc
来遍历对象或数组,这里其实eachFunc
第二个参数就是一个function
,需要三个参数 当前值,当前key ,完整数组或对象
// iterate(value, key, collection)
function forEachSelf(collection, iterate) {}
- 在第一步定义的
iterate
函数中,会调用传入predicate
来进行判断,如果符合条件就将key
赋值给result
,return false
return false
告知外界已经找到了,可以结束遍历了- 如果遍历完成还是没有找到对应的值,会返回
undefined
# Remark
# Example
const a = {a:1,b:2,c:3}
const c = [1,2,3,4,5]
function forEach (collection, iterate) {
Object.keys(collection).some(k => {
return iterate(collection[k], k, collection) !== undefined
})
}
baseFindKey(c, (value)=>value===3, forEach) // 2
baseFindKey(a, (value)=>value===3, forEach) // c