Skip to content

Instantly share code, notes, and snippets.

@zerosrat
Created March 4, 2019 12:17
Show Gist options
  • Save zerosrat/3fb4cac4dc3b6724e859162bcf60dec8 to your computer and use it in GitHub Desktop.
Save zerosrat/3fb4cac4dc3b6724e859162bcf60dec8 to your computer and use it in GitHub Desktop.
array methods polyfill
Array.prototype.forEach1 = function(fn) {
const arr = this
for (let i = 0; i < arr.length; i++) {
fn.call(this, arr[i], i, arr)
}
}
Array.prototype.map1 = function(fn) {
const arr = [...this]
for (let i = 0; i < arr.length; i++) {
arr[i] = fn.call(this, arr[i], i, arr)
}
return arr
}
Array.prototype.reduce1 = function(fn) {
const initialValue = arguments.length === 2 && arguments[1]
const hasInitialValue = typeof initialValue !== 'undefined'
const arr = this
let acc, cur
if (hasInitialValue) {
for (let i = 0; i < arr.length; i++) {
if (i === 0) {
acc = initialValue
}
cur = arr[i]
acc = fn.call(this, acc, cur, i, arr)
}
} else {
for (let i = 0; i < arr.length - 1; i++) {
if (i === 0) {
acc = arr[i]
}
cur = arr[i + 1]
acc = fn.call(this, acc, cur, i, arr)
}
}
return acc
}
var arr = [1,2,3]
// arr.forEach1((e, i ,a) => console.log(e, i, a))
// arr.map1(i => i*2)
console.log(arr.reduce1((acc, cur) => acc+cur))
console.log(arr.reduce1((acc, cur) => acc+cur, 4))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment