# filter

# Description

遍历 collection(集合)元素,返回 predicate(断言函数)返回真值 的所有元素的数组。 predicate(断言函数)调用三个参数:(value, index|key, collection)。

# Params

(array, predicate)

# Return

Array

# Code

function filter(array, predicate) {
  let index = -1
  let resIndex = 0
  const length = array == null ? 0 : array.length
  const result = []

  while (++index < length) {
    const value = array[index]
    if (predicate(value, index, array)) {
      result[resIndex++] = value
    }
  }
  return result
}

# Analyze

Array.prototype.filter 基本一致,接下来看看具体实现

首先拿到了 arraylength ,定义了结果 result

通过 while 循环,根据 predicate 判断,如果 返回 值为 真值,则将 value 放到 result 对应的索引中

最后 while 循环完成,返回 result

# Remark

  1. Array.prototype.filter MDN (opens new window) 方法创建一个新数组,其包含通过所提供函数实现的测试的所有元素。

# Example

console.log(filter([1,2,3,4,5], (v) => v>3)) // [ 4, 5 ]