JS进阶2 -- 数组API:map, flatMap, reduce

本文详细介绍了JavaScript中的数组API:map,flatMap和reduce。map用于创建新数组,不改变原数组,flatMap允许扁平化操作,reduce则用于对数组进行累计计算,返回单一结果。此外,文章还通过示例展示了它们的使用区别和应用场景,如计算商品总价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS进阶2 -- 数组API:map, flatMap, reduce


JS进阶1 – Promise原理及应用中我们学习了Promise的原理以及相关API的使用,本文将继续重点跟大家介绍JS中的第2个重点内容 – 数组API:map, flatMap, reduce。废话不多说,一起来看看吧!

2-数组API:map, flatMap, reduce

2-1 map

  • map接收一个函数参数,这个函数可以按顺序接收三个参数,分别是item, index, arr, 其中:
    • item指的是从第0项元素到最后的所有元素
    • index指的是数组的下标
    • arr指的是整个数组
  • 通过map遍历返回的数据形成新数组与原数组之间没有引用关系
  • 通过map遍历返回的新数组长度和原数组的长度是完全相等的
  • map和forEach的区别
    • map有返回值,forEach没有返回值
	// map
    let arr = [1, 2, 3, 4, 5];
    let arr1 = arr.map(function(item, index, arr) {
        console.log(item, index, arr);
        return item * 2;
    });
    arr[0] = 20;
    console.log(arr1);  // 2 4 6 8 10

2-2 flatMap

  • flatMap接收一个函数参数,这个函数可以按顺序接收三个参数,分别是item, index, arr, 其中:
    • item指的是从第0项元素到最后的所有元素
    • index指的是数组的下标
    • arr指的是整个数组
  • 通过flatMap遍历返回的数据形成新数组与原数组之间没有引用关系
  • 与map相比,flatMap可以改变返回数组的长度
	// faltMap
    let arr2 = arr.flatMap(function(item, index,arr) {
        console.log(item, index, arr);
        return [item, item + 10];
    });
    arr[0] = 20;
    console.log(arr2);

2-3 reduce

  • reduce接收一个函数参数,这个函数可以按顺序接收四个参数,分别是sum, item, index, arr, 其中:
    • sum: 指的是数组的第0项元素
    • item指的是从第1项元素到最后的所有元素
    • index指的是数组的下标
    • arr指的是整个数组
      注意
      • return 将会把sum+item的结果重新赋值给sum,并且继续轮寻计算,最后完成的结果返回给变量
      • 如果给了初始值,sum就是初始值,item就不再从第1项开始了,而是从第0项开始
	// reduce
    let sum = arr.reduce(function(sum, item, index, arr) {
        console.log(sum, item);
        return sum + item;
    });
    console.log(sum);  // 15
    /*
        如果给了初始值(100),sum就是100,item就不再从第1项开始了,而是从第0项开始
    */
    let sum1 = arr.reduce(function(sum, item) {
        return sum + item;
    }, 100);
    console.log(sum1);  // 115
	// 应用:计算商品总价
    let productList = [
        {id: 1001, name: 'aaa', price: 30, num: 2, sum: 60},
        {id: 1002, name: 'bbb', price: 50, num: 2, sum: 100},
        {id: 1003, name: 'ccc', price: 40, num: 2, sum: 80},
        {id: 1004, name: 'ddd', price: 70, num: 2, sum: 140}
    ]

    let totalPrice = productList.reduce(function(sum, item) {
        return sum + item.sum;
    }, 0);
    console.log(totalPrice);  // 380 = 60 + 100 + 80 + 140
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值