Array.prototype.flat()

flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。

const arr1 = [0, 1, 2, [3, 4]];
console.log(arr1.flat());
// [0, 1, 2, 3, 4]const arr2 = [0, 1, 2, [[[3, 4]]]];
console.log(arr2.flat(2));
// [0, 1, 2, [3, 4]]

语法:var newArray = arr.flat([depth])

  • depth 可选参数,默认是1,如果想全部扁平可以传Infinity
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]//使用 Infinity,可展开任意深度的嵌套数组
var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

flat()方法会移除数组中的空项:

var arr4 = [1, 2, , 4, 5];
console.log(arr4.flat());
// [1, 2, 4, 5]

Array.prototype.flatMap()

flatMap() 方法首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。它与 map 连着深度值为1flat几乎相同,但flatMap通常在合并成一种方法的效率稍微高一些。

语法:

var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {// return element for new_array
}[, thisArg])
  • currentValue 当前正在数组中处理的元素
  • index 可选的。数组中正在处理的当前元素的索引。
  • array 可选的。被调用的 map 数组
  • thisArg 可选的。执行 callback 函数时 使用的this 值。
var arr1 = [1, 2, 3, 4];arr1.map(x => [x * 2]);
// [[2], [4], [6], [8]]arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]// only one level is flattened
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]

场景:将几句话的数组拆分成单词数组

let arr1 = ["it's Sunny in", "", "California"];arr1.map(x => x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]arr1.flatMap(x => x.split(" "));
// ["it's","Sunny","in", "", "California"]

【ES10(2019)】Array扩展 flat / flatMap相关推荐

  1. ES10:Object.fromEntries()、String.prototype.trim()、Array.prototype.flat()、Array.prototype.flatMap()

    Object.fromEntries(iterable) 把键值对列表(二维数组)转换为一个对象,这个方法和 Object.entries() 相对 Object.fromEntries([['foo ...

  2. js实现数组降维算法[不准用Array.prototype.flat的api]

    js实现数组降维算法[不准用Array.prototype.flat的api] // target要降维的元素,n降维阶数,newArr存储结果的新数组 function f(target, n = ...

  3. 数组的flat方法【Array.prototype.flat()】

    数组的flat方法[Array.prototype.flat()] 一. 概念   flat() 方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回. 二 ...

  4. 【ES10(2019)】JSON扩展 superset / stringify() 增强能力

    JSON superset 什么是 JSON 超集?,简而言之就是让 ECMAScript 兼容所有JSON支持的文本. ECMAScript 曾在标准 JSON.parse 部分阐明 JSON 确为 ...

  5. 【ES10(2019)】Symbol 扩展 Symbol.prototype.description

    我们知道,Symbol 的描述只被存储在内部的 Description ,没有直接对外暴露,我们只有调用 Symbol 的toString()时才可以读取这个属性: const name = Symb ...

  6. 【ES10(2019)】String 扩展 trimStart / trimEnd

    String.prototype.trimStart() trimStart()方法从字符串的开头删除空格,移除原字符串左端的连续空白符并返回一个新字符串,并不会直接修改原字符串本身.trimLeft ...

  7. Swfit Array 遍历 map flatMap filter reduce

    官网文档:Apple Developer Documentation 常用属性和方法可查看官网文档. 一.遍历 这里主要记录下遍历方法. 使用for in 遍历 for item in arr {pr ...

  8. ES6方法 flat flatMap

    flat 为了更好的渲染界面,我们会将数据整合成拥有一定层级的格式 const arr = [1, 2, [3, 4, 5, [6, 7, ["hello world"], 8], ...

  9. js Array扩展方法

    Object.extend = function (destination, source) {  /// <summary>     /// 扩展对象方法     /// </su ...

最新文章

  1. 1亿参数4万样本BERT仍听不懂人话,我们离通用NLP能还有多远?
  2. 统计5分钟内Nginx访问量及平均相应时间
  3. 【Kotlin】扩展接收者 与 分发接收者 ( 类内部扩展用法 | 注意事项 | open 修饰扩展 )
  4. 基于MATLAB的TDOA算法的仿真
  5. windows环境下设置Redis自启动
  6. SAPSQL_IN_ITAB_ILLEGAL_OPTION dump
  7. Java同步锁——lock与synchronized 的区别【转】
  8. python标志变量_Python 中的 global 标识对变量作用域的影响
  9. 五分钟读懂UML类图(转)
  10. U盘怎么重装系统到电脑上
  11. c#基础系列2---深入理解 String
  12. 心情整天都在郁闷浮云往事如云烟,撕心裂肺:伤感心情日志
  13. 信创干部人事档案管理系统单机版 - 人力资源档案管理系统软件
  14. Python判断素数(质数)——循换结构、控制及else循环扩展模式的实践
  15. 1、Android概述
  16. Springboot游戏道具在线交易平台毕业设计源码171956
  17. Kettle--java代码组件实现密码加密(BCryptPasswordEncoder)
  18. ThreadLocal 简单了解
  19. 一个案例两种分析方法告诉你数据涨跌异动该如何处理?附送涨跌问题常见五种假设
  20. Win8.1打开电脑时提示C:\WINDOWS\system32\config\systemprofile\Desktop不可用的解决方法

热门文章

  1. Android 4.0操作系统的20个使用小技巧
  2. 微博营销不可不知的微博六种人
  3. 在后台获取前台按钮里的值(如LinkButton)
  4. 新图表来袭,FineReport新增热力地图、漏斗图、图表切换新功能
  5. 关于Python的趋势都在这了, Python官方年度报告中文版
  6. 使用T-SQL进行数据库备份并检查该备份文件是否存在且作出相应处理
  7. strcat在某种特定条件下的优化
  8. SEOer必须注意的10种错误SEO做法
  9. 发些c/c++/vc/驱动/网络安全的好书和资料
  10. 水滴石穿C语言之typedef的问题