• 数组17—flatMap() :对每个元素执行映射函数并将结果展平


    在上节,我们学习如何使用 JavaScript Array flat() 方法来展平数组,错过的小伙伴可以点击文章《【JavaScript 教程】第六章 数组16—flat() :递归地将数组展平到指定的深度 》进行学习。

    那么,在今天的教程中,我们将一起来学习如何使用JavaScript Array flatMap() 方法,该方法使用映射函数映射数组中的每个元素,并将结果展平为新数组。

    JavaScript Array flatMap() 方法介绍

    flat() 方法创建一个新数组,其中连接了子数组的元素。

    map() 方法创建一个新数组,其元素是映射函数的结果。

    flatMap() 方法是 map() 方法后跟深度为 1 的 flat() 方法的组合。

    flatMap() 方法首先使用映射函数映射数组中的每个元素,然后将结果展平到一个新数组中。

    下面显示了 flatMap() 方法的语法:

     
    
    let newArray = arrayObject.flatMap(callback,thisArg);

    flatMap() 方法有两个参数:

    1)回调映射函数

    回调是映射函数,其语法与 map() 方法中的语法相同:

     
    
     
    

    function callback(currentValue [[,index], array]);

    2) thisArg 参数

    可选的 thisArg 参数是在执行回调时用作 this 的值。

    请注意,flatMap() 方法不会修改原始数组。

    JavaScript 数组 flatMap() 示例

    让我们举一些使用 flatMap() 方法的例子。

    1)从句子示例中创建单词

    假设我们有以下数组:

     
    
     
    

    let sentences = ["JavaScript Array flatMap()", " ", "is", " ", "Awesome"];

    以下 map() 函数拆分句子的单词:

     
    
     
    

    let words = sentences.map(s => s.split(' '));console.log(words);

    输出:

     
    
     
    

    [ [ 'JavaScript', 'Array', 'flatMap()' ], [ ' ' ], [ 'is' ], [ ' ' ], [ 'Awesome' ]]

    结果是一个由单词填充的嵌套数组的数组,要展平结果,我们可以在 map() 方法的结果上使用 flat() 方法。 但是,使用 flatMap() 方法会更简洁。

    flatMap() 通过映射函数运行数组中的每个句子并将映射结果展平,从而创建一个展平数组:

     
    

    let sentences = ["JavaScript Array flatMap()", " ", "is", " ", "Awesome"];let words = sentences.flatMap(s => s.split(' '));console.log(words);代码语言:JavaScript (javascript )

    输出:

     
    
     
    

    [ 'JavaScript', 'Array', 'flatMap()', '', '', 'is', '', '', 'Awesome' ]

    2)在映射示例期间添加和删除元素

    flatMap() 方法允许我们在映射期间添加或删除元素,考虑以下示例:

    假设我们有以下购物车:

     
    
     
    

    let cart = [{name: 'Smartphone',qty: 2,price: 500,freeOfCharge: false},{name: 'Tablet',qty: 1,price: 800,freeOfCharge: false}];

    如果客户购买智能手机,我们想给送他们免费的屏幕保护膜。

    当客户将智能手机添加到购物车时,我们可以使用 flatMap() 方法将屏幕保护膜添加到购物车,如下所示:

     
    
     
    

    let newCart = cart.flatMap((item) => {if (item.name === 'Smartphone') {return [item, {name: 'Screen Protector',qty: item.qty,price: 5,freeOfCharge: true }] } else {return [item]; } });console.log(newCart);

    购物车将如下所示:

     
    
     
    

    [ { name: 'Smartphone', qty: 2, price: 500, freeOfCharge: false }, { name: 'Screen Protector', qty: 2, price: 5, freeOfCharge: true }, { name: 'Tablet', qty: 1, price: 800, freeOfCharge: false }]

    下面使用 reduce() 方法计算购物车中商品的总金额, 它忽略了免费项目,例如屏幕保护膜:

     
    
     
    

    const total = newCart.reduce((sum, item) => {if (!item.freeOfCharge) sum += item.price * item.qty;return sum;}, 0);console.log({total});

    输出:

     
    
     
    

    { total: 1800 }

    总结

    使用 flatMap() 方法通过映射函数运行集合中的每个元素并展平映射的结果,从而创建一个展平的元素数组。

  • 相关阅读:
    win11 edge怎么卸载?win11 edge浏览器彻底卸载的方法教程
    同一页面实现recycleView三种布局【recycleView + adapter】
    深度学习学习率的调整
    『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用
    横向滚动条 css js html
    React报错之React hook 'useState' cannot be called in a class component
    【源码+名师讲解】Java游戏开发_Java飞机大战1.0进阶版_Java28个功能点能力提升必备_Java初级项目_Java练手项目_Java课程设计
    耐腐蚀特氟龙塑料材质PFA烧杯超纯试剂反应杯
    深度学习中的注意力机制模型及代码实现(SE Attention、CBAM Attention)
    安全防御2
  • 原文地址:https://blog.csdn.net/m0_61643133/article/details/127744705