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

一、 概念

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

二、语法结构

var newArray = arr.flat([depth])
  • 参数depth: 指定要提取嵌套数组的结构深度,默认值为 1。
  • 返回值: 一个包含将数组与子数组中所有元素的新数组。

三、示例

console.log([1 ,[2, 3]].flat()); // [1, 2, 3]// 指定转换的嵌套层数
console.log([1, [2, [3, [4, 5]]]].flat(2)); // [1, 2, 3, [4, 5]]// 不管嵌套多少层【使用 Infinity 作为深度,展开任意深度的嵌套数组】
console.log([1, [2, [3, [4, 5]]]].flat(Infinity)); // [1, 2, 3, 4, 5]// 自动跳过空位【会移除数组中的空项】
console.log([1, [2, , 3]].flat());<p> // [1, 2, 3]

四、 替代方案【reduce 与 concat】

  • reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
  • concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
var arr1 = [1, 2, [3, 4]];
arr1.flat();// 反嵌套一层数组
arr1.reduce((acc, val) => acc.concat(val), []);// [1, 2, 3, 4]// 或使用 ...
const flatSingle = arr => [].concat(...arr);
// 使用 reduce、concat 和递归无限反嵌套多层嵌套的数组
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];function flattenDeep(arr1) {return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
}
flattenDeep(arr1);
// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// 不使用递归,使用 stack 无限反嵌套多层嵌套数组
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatten(input) {const stack = [...input];const res = [];while (stack.length) {// 使用 pop 从 stack 中取出并移除值const next = stack.pop();if (Array.isArray(next)) {// 使用 push 送回内层数组中的元素,不会改动原始输入 original inputstack.push(...next);} else {res.push(next);}}// 使用 reverse 恢复原数组的顺序return res.reverse();
}
flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
// 递归版本的反嵌套
function flatten(array) {var flattend = [];(function flat(array) {array.forEach(function(el) {if (Array.isArray(el)) flat(el);else flattend.push(el);});})(array);return flattend;
}

数组的flat方法【Array.prototype.flat()】相关推荐

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

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

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

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

  3. 【ES10(2019)】Array扩展 flat / flatMap

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

  4. flat方法的简单实现

    记录一下实现flat方法的过程 flat实现的方式有很多种,这里只是记录一下其中的2种思路. Array.prototype.flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的 ...

  5. 【JavaScript笔记 · 基础篇(五)】Array全家桶(引用数据类型中的数组 / Array对象 / Array.prototype)

    文章目录 一. 引用数据类型中的数组 1.1 概述 1.2 初始化 1.2.1 字面量 1.2.2 构造函数模式 1.3 访问 1.4 length属性 1.5 数组遍历 1.6 类数组对象 1.6. ...

  6. 判断数组类型的方法(Array.isArray)以及Math数字对象

    判断数组类型的方法       Array.isArray var a = [1,2,3];var r = Array.isArray(a);console.log(r); 预览效果 Math数字对象 ...

  7. js 打散二维数组最简方法(JS数组降维的几种方法)

    var arr=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16] ];1.arr=[].concat.apply([],arr);console.dir( ...

  8. c++ 构造函数数组_从 JS 数组操作到 V8 array.js

    前言 最近在写面试编程题,经常用到数组,经常想偷个懒,用它提供的方法,奈何还是对数组方法使用不熟练,导致写了很多的垃圾代码,很多地方稍加修改的话肯定变得简洁高效优雅? 所以✍这篇文章本着了解一下Jav ...

  9. JavaScript--Array; Array.prototype

    Array: Javascritp中Array的方法: findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. find() 方法返回数组中满足提供的测试函数的第一个 ...

最新文章

  1. AMS重要的数据结构解析(二):TaskRecord
  2. python3.7安装numpy模块-CENTOS7 Python3.7安装numpy
  3. oracle11g中SQL优化(SQL TUNING)新特性之Adaptive Cursor Sharing (ACS)
  4. servlet——请求乱码问题解决
  5. 【Python基础】如何编写简洁美观的Python代码
  6. fatal error C1083: Cannot open include file: 'ceconfig.h': No such file or directory
  7. 【mDNS】本地DNS解析协议
  8. 算法63----丑数【动态规划】
  9. echarts散点图搭配时间轴
  10. How to find error message from OMS repository
  11. paip.账务系统的安全性
  12. MySQL函数-递归函数
  13. 计算机没有打字键盘显示不出来,电脑无法打字键盘没有反应怎么办 win10电脑屏幕键盘怎么打开...
  14. JAVA 图片压缩及png转jpg
  15. 普适计算Topic推荐-AMiner
  16. Navicat for MySQL的使用
  17. python3网络爬虫笔记-爬虫基础原理
  18. Bank相关2_金融卡IC卡知识50问
  19. 2009年甲骨文学院教师培训
  20. 手写Spring DI依赖注入,嘿,你的益达!

热门文章

  1. 【QQ】精彩QQ自动回复录(经典)
  2. Python 绝对路径引用
  3. 车载以太网基础篇之Eth Driver
  4. 使用 Python 进行数据可视化之Matplotlib
  5. JavaSE基础02
  6. 面试题1:一个人岁数的3次方是四位数,四次方是六位数,并知道此人岁数的3次方和4次方用遍了0--9十个数字,请编程写程序求此人的岁数
  7. 如何给非专业人士讲解什么是深度学习?
  8. 云科通明湖:金融业务可持续性能力建设,少不了这块“拼图”!
  9. 配置交叉编译工具链-嵌入式Linux
  10. CSS画圆半圆扇形三角梯形