当前位置: 首页 > news >正文

JavaScript 数组之flat和flatMap

    在 JavaScript 中,flat()flatMap() 都是数组的方法,它们可以用来处理嵌套数组,但它们的功能有所不同。

1、flat

用途

   flat() 方法用于创建一个新数组,该新数组将原始数组中的所有子数组连接到指定深度的层级。这对于简化多维数组非常有用。

array.flat([depth])array: 要展平的原始数组。
depth (可选): 指定展平的最大深度。默认值为 1onst arr = [1, 2, [3, 4, [5, 6]], 7];
const flattened = arr.flat(2); // 展平两层
console.log(flattened); // 输出: [1, 2, 3, 4, [5, 6], 7]const fullyFlattened = arr.flat(Infinity); // 完全展平
console.log(fullyFlattened); // 输出: [1, 2, 3, 4, 5, 6, 7]
使用场景
  • 当你需要将多维数组简化为单个一维数组时。
  • 当你需要处理嵌套的数据结构,例如 JSON 数据,并希望简化数据访问

2. flatMap()

用途

       flatMap() 方法首先映射然后展平数组。它允许你对每个元素应用一个转换函数,然后将结果展平到一层。这使得它非常适合于在转换数组的同时保持数据的一致性。

示例
array.flatMap(callback[, thisArg])callback: 一个回调函数,它为每个元素调用并返回新的元素。
thisArg (可选): 执行回调时使用的 this 值。const numbers = [1, 2, 3];
const doubledAndFlattened = numbers.flatMap(x => [x * 2]);
console.log(doubledAndFlattened); // 输出: [2, 4, 6]const nestedNumbers = [1, [2, 3], 4];
const flattened = nestedNumbers.flatMap(x => Array.isArray(x) ? x : [x]);
console.log(flattened); // 输出: [1, 2, 3, 4]

比如我有一个数组 name 以顿号分割和 count也以对号分割  两条变成6条

  
let arr = [{ name: "张三、李四", num: 10000, count: "上天、入地" },{ name: "王五", num: 20000, count: "下海、游泳" },];结果[{ name: "张三", num: 10000, count: "上天" },{ name: "张三", num: 10000, count: "入地" },{ name: "李四", num: 10000, count: "上天" },{ name: "李四", num: 10000, count: "入地" },{ name: "王五", num: 20000, count: "下海" },{ name: "王五", num: 20000, count: "游泳" }
]
// 分割名称和计数字段let splitData = arr.flatMap((item) => {let names = item.name.split("、");let counts = item.count.split("、");return counts.flatMap((count) => {return names.map((name) => ({name,num: item.num,count,}));});});console.log(splitData);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue 3+Vite+Eectron从入门到实战系列之(四)一Electron热身运动(二)
  • mmsegmentation 自定义模型报错:KeyError: ‘EncoderDecoder is not in the model registry
  • 【HBZ分享】bean的生命周期 以及 各个阶段在spring的哪个类被调用
  • Leetcode75-8 递增的三元子序列
  • 在Windows MFC\C++编程中,如何使用OnCopyData函数
  • React 条件判断
  • MySql审计平台
  • MacOS Anaconda 安装教程及虚拟环境创建
  • 吴恩达:如何系统学习机器学习?
  • Java开发工具IDEA
  • 宿主机与容器(docker)之间的数据共享
  • celery使用
  • HDFS 之 文件流
  • proteus仿真c51单片机(四)双机串口通信(电路设计及代码)
  • 八 信息系统基础知识(考点篇)试题
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 《深入 React 技术栈》
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • canvas 高仿 Apple Watch 表盘
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Invalidate和postInvalidate的区别
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • OSS Web直传 (文件图片)
  • Selenium实战教程系列(二)---元素定位
  • Spring Cloud Feign的两种使用姿势
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Vue学习第二天
  • 笨办法学C 练习34:动态数组
  • 当SetTimeout遇到了字符串
  • 三栏布局总结
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信开放平台全网发布【失败】的几点排查方法
  • 如何在招聘中考核.NET架构师
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 飞书APP集成平台-数字化落地
  • #HarmonyOS:Web组件的使用
  • #单片机(TB6600驱动42步进电机)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (JS基础)String 类型
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (笔试题)合法字符串
  • (苍穹外卖)day03菜品管理
  • (回溯) LeetCode 78. 子集
  • (未解决)macOS matplotlib 中文是方框
  • (学习总结16)C++模版2
  • (一)SpringBoot3---尚硅谷总结
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)创业的注意事项
  • 、写入Shellcode到注册表上线
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET上SQLite的连接