forEach的实现
考虑forEach的使用,传入的函数callback,回调第1个参数是数组的项,第2个参数是索引
javascript
Array.prototype.myForEach = function(callback) {
var len = this.length
if(typeof callback !== 'function') {
throw new Error('must be function')
}
for(var i=0;i<len;i++) {
callback.call(this, this[i], i)
}
}
map的实现
map的实现基本和forEach相同,但是map有返回,返回一个新的数组,是callback处理后的数组
javascript
Array.prototype.myMap = function(callback) {
var len = this.length
var arr = []
if(typeof callback !== 'function') {
throw new Error('must be function')
}
for(var i=0;i<len;i++) {
arr.push(callback.call(this, this[i], i))
}
return arr
}
reduce的实现
javascript
Array.prototype.myReduce = function(fn, init) {
var i = 0
var len = this.length
var pre = init
if(init == undefined) {
pre = this[0]
i = 1
}
for(i;i<len;i++) {
pre = fn.call(this, pre, this[i], i, this)
}
return pre
}
filter的实现
javascript
Array.prototype.myFilter = function(fn) {
ver _newArray = []
var len = this.length
for(var i=0;i<len;i++) {
if(fn.call(this, this[i], i)) {
if(typeof this[i] === 'object') {
_newArray.push(Object.create(this[i]))
} else {
_newArray.push(this[i])
}
}
}
return _newArray
}
自定义实现一个高阶函数-查找属性
javascript
function findProperty(obj, fn) {
var _obj = Object.create(obj)
var _propertyArr = []
for(var item in _obj) {
if(fn.call(this, _obj[item], item)) {
_propertyArr.push(item)
}
}
return _propertyArr
}