思维不行,求指点?
function reduce(array, iteratee, init, context) {
if (array == null) array = [];
if (toString.call(array) !== '[object Array]') throw new TypeError(array + ' is not a array');
if (iteratee == null) return array;
if (typeof iteratee !== "function") throw new TypeError(iteratee + ' is not a function');
var len = array.length, i = 0;
//把iteratee绑定到context对象上
iteratee = (function(func, context) {
if (context === undefined) return func;
return function(init, value, index, collection) {
return func.call(context, init, value, index, collection)
}
})(iteratee, context);
//若不传初始值init,则规定第一个为初始值
if (arguments.length < 3) {
init = array[i++]
}
for (; i < len; i++) {
init = iteratee(init, array[i], i, array)
}
return init
}
一般调用:
reduce([1, 2, 3], function(init, value) {
return init + value //自定义一个加法规则
}, 1)
// 7
绑定到对象:
var myMath = {
name:"myMath",
add:function(a,b){
return a+b
}
}
reduce([1, 2, 3], function(init, value) {
//绑定了对象myMath,this就指向myMath,就可以调用其方法或获取其属性值
return this.add(init,value)
}, 1, myMath);
// 7
6 回答5.3k 阅读✓ 已解决
9 回答9.5k 阅读
5 回答3.7k 阅读✓ 已解决
4 回答8.1k 阅读✓ 已解决
7 回答10.1k 阅读
5 回答8.4k 阅读
2 回答10.5k 阅读✓ 已解决
来源