Skip to content

Latest commit

 

History

History
42 lines (40 loc) · 964 Bytes

README8.md

File metadata and controls

42 lines (40 loc) · 964 Bytes

ES5 实现数组 map 方法


function selfMap(fn, context) {
  let arr = Array.prototype.slice.call(this)
  let mappedArr = []
  for (let i = 0; i < arr.length; i++) {
    if (!arr.hasOwnProperty(i)) continue
    mappedArr.push(fn.call(context, arr[i], i, this))
  }
  return mappedArr
}

ES5 实现数组 filter 方法


function selfFilter(fn, context) {
  let arr = Array.prototype.slice.call(this)
  let filterdArr = []
  for (let i = 0; i < arr.length; i++) {
    if (!arr.hasOwnProperty(i)) continue
    fn.call(context, arr[i], i, this) && filterdArr.push(arr[i])
  }
  return filterdArr
}

ES5 实现数组 reduce 方法


function selfReduce(fn, initValue) {
  let arr = Array.prototype.slice.call(this)
  if (initValue) arr.unshift(initValue)
  let res = arr[0]
  for (let i = 0; i < arr.length; i++) {
    if (!arr.hasOwnProperty(i + 1)) continue
    res = fn.call(null, res, arr[i + 1], i ,arr)
  }
  return res
}