# forOwn

# Description

使用 iteratee 遍历自身的可枚举属性。 iteratee 会传入 3 个参数:(value, key, object)。

# Params

(object, iteratee)

# Code

function forOwn(object, iteratee) {
  object = Object(object)
  Object.keys(object).forEach((key) => iteratee(object[key], key, object))
}

# Analyze

通过 Object.keys 拿到可遍历属性数组,调用 数组的 forEach 方法,传入 iteratee 函数进行处理

# Remark

lodash 的解释中,说 如果 iteratee 返回 false ,会提前结束迭代,这一点是错误的

Iteratee functions may exit iteration early by explicitly returning false.

Object.keys (opens new window) 拿到的是一个数组,然后调用数组的 forEach (opens new window) 方法来进行迭代,在数组的 forEach 方法中,有一点很明确 除了抛出异常以外,没有办法中止或跳出 forEach() 循环。 , 所以这里 返回 false ,也是不能结束循环的

# Example

const a = {a:1,b:2,c:3}
console.log(forOwn(a, (v, i, obj) => {
  if (v < 2) {
    obj[i] = ['小于2']
    return false
  }
  obj[i] = [i]
}))
console.log(a) // { a: [ '小于2' ], b: [ 'b' ], c: [ 'c' ] }