<script>
var arr = [10, 20, 30, 40, 50, 160];
//reduce 方法用法 +数组.reduce([callback],[initialValue])
/***
* 数组的reduce方法:在数组的遍历过程中,可以累积上一次处理的结果,基于前次的结果继续处理, 不传[initialValue])
*/
var res = arr.reduce(function(result, item, index) {
// [initialValue]初始值不传 result默认初始值是数组第一项, 当前result是从第二项开始遍历
//每遍历一次,回调函数被执行一次
/***
* result : 存储的是上一次回调函数返回的结果(除了第一次是初始值或者数组第一项)
* item : 当前遍历的这一项
* index : 当前遍历的索引
*/
// console.log(result, item, index) //10 20 1
console.log(result)
return result + item
});
console.log(res)
/**
* 传 [initialValue])
*/
var res = arr.reduce((result, item) => {
//如果传递初始值,则result 第一次的结果结果就是初始值,item从数组第一项开始遍历
// console.log(result)
return result + item
}, 0);
console.log(res)
/*****手动reduce */
Array.prototype.reduce = function reduce(callback, initial) {
//1 .首先保证this指向 ,和从哪开始 ,callback是一个函数
var _this = this,
i = 0;
//2 .判断initial是否传值
if (typeof callback !== 'function') throw new TypeError('callback must be an function!'); //不是函数才报错
if (typeof initial === 'undefined') {
//如果没有传值,则让数组initial默认第一项,而遍历从第二项开始
initial = _this[0]; // 默认第一项
i = 1; //当前遍历项索引
}
// 3 .迭代数组
for (; i < _this.length; i++) {
var index = i,
item = _this[i];
initial = callback(initial, item, index);
}
return initial;
};
var tist = arr.reduce((result, item) => {
return item + result;
});
console.log(tist)
<script>
手动reduce
最新推荐文章于 2024-08-03 17:05:14 发布