jsArray 方法辨析[手写代码]

forEach,map

JavaScript中的forEachmap都是数组方法,它们的功能类似,但是在用法和返回值上有一些区别。

forEach方法是遍历数组的每一个元素,对每个元素执行指定的操作。它不会返回任何值,只是在每个元素上执行指定的操作。该方法接受一个回调函数作为参数,这个回调函数会在遍历过程中执行,并且它接收三个参数:当前元素,当前索引和原数组。例如:

let arr = [1, 2, 3];
arr.forEach(function(item, index, array) {
  console.log(item, index, array);
});

上面的代码会输出:

1 0 [1, 2, 3]
2 1 [1, 2, 3]
3 2 [1, 2, 3]

map方法也是遍历数组的每一个元素,对每个元素执行指定的操作,并将操作后的结果存储在一个新数组中。该方法接受一个回调函数作为参数,这个回调函数会在遍历过程中执行,并且它接收三个参数:当前元素,当前索引和原数组。例如:

let arr = [1, 2, 3];
let newArr = arr.map(function(item, index, array) {
  return item * 2;
});
console.log(newArr); // [2, 4, 6]

上面的代码将原数组中的每个元素乘以2,并将结果存储在一个新数组中。

总之,forEach方法用于对数组中的每个元素进行操作,而map方法用于对数组中的每个元素进行操作并返回操作后的结果。

reduce

JavaScript中的reduce()是一种数组方法,它允许对数组的每个元素执行一个指定的函数,并将结果缩减为单个值。

reduce()函数接受两个参数:回调函数和可选的初始值。回调函数接受四个参数:累积值、当前值、当前索引和数组本身。

reduce()的基本语法如下:

array.reduce(callback, initialValue)

其中,callback函数接受四个参数:

function callback(accumulator, currentValue, currentIndex, array) {
  // ...
}
  • accumulator: 累积器,保存reduce()的返回值。回调函数在每次执行后返回的结果都将累加到这个值中。
  • currentValue: 当前值,每次迭代中处理的数组元素。
  • currentIndex: 当前索引,每次迭代中处理的数组元素的索引。
  • array: 原始数组,reduce()函数被调用的数组。

reduce()函数的执行过程如下:

  1. 如果提供了initialValue,则accumulator将初始化为这个值,否则将初始化为数组的第一个元素。
  2. 对数组的每个元素执行回调函数,并将返回值添加到accumulator中。
  3. 在所有元素都处理完毕后,reduce()函数将返回accumulator的最终值。

以下是一个使用reduce()函数计算数组元素之和的示例:

const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
console.log(sum); // 输出 15

在上面的示例中,初始值为0,累积器accumulator从0开始累加每个元素的值,最终得到数组元素之和15。

reduce()函数也可以用于计算其他聚合函数,例如最大值、最小值和平均值等。它还可以用于操作对象数组,例如将对象数组映射到另一个值数组,或根据对象属性对数组进行分组等操作。

手写reduce()
//arr:要累积的数组。
//callback:每一次累积执行的回调函数。
//init:初始值,可选。
function myReduce(arr, callback, init){
    //如果没有传入初始值,则使用数组的第一项作为初始值,从第二项开始遍历。
    let num = init == undefined? arr[0]: init;
    //如果传入了初始值,则从数组的第一项开始遍历。
    let i = init == undefined? 1: 0
    //遍历数组,使用回调函数处理每一项,回调函数接收三个参数:上一次累积的结果,当前项,当前项的索引。
    for (; i< arr.length; i++){
        //将处理后的结果作为下一次回调函数的第一个参数,继续累积计算。
        num = callback(num,arr[i],i)
    }
    //遍历完成后,返回最终的累积结果。
    return num
}
function fn(prev,cur, index){
    return prev + cur
}
var arr = [2,3,4,5]
var b = myReduce(arr, fn,10) 
console.log(b)   // 24
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学不会只能哭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值