数组的flat方法【Array.prototype.flat()】
数组的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()】相关推荐
- js实现数组降维算法[不准用Array.prototype.flat的api]
js实现数组降维算法[不准用Array.prototype.flat的api] // target要降维的元素,n降维阶数,newArr存储结果的新数组 function f(target, n = ...
- ES10:Object.fromEntries()、String.prototype.trim()、Array.prototype.flat()、Array.prototype.flatMap()
Object.fromEntries(iterable) 把键值对列表(二维数组)转换为一个对象,这个方法和 Object.entries() 相对 Object.fromEntries([['foo ...
- 【ES10(2019)】Array扩展 flat / flatMap
Array.prototype.flat() flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回. const arr1 = [0, 1, 2 ...
- flat方法的简单实现
记录一下实现flat方法的过程 flat实现的方式有很多种,这里只是记录一下其中的2种思路. Array.prototype.flat()方法会按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的 ...
- 【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. ...
- 判断数组类型的方法(Array.isArray)以及Math数字对象
判断数组类型的方法 Array.isArray var a = [1,2,3];var r = Array.isArray(a);console.log(r); 预览效果 Math数字对象 ...
- 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( ...
- c++ 构造函数数组_从 JS 数组操作到 V8 array.js
前言 最近在写面试编程题,经常用到数组,经常想偷个懒,用它提供的方法,奈何还是对数组方法使用不熟练,导致写了很多的垃圾代码,很多地方稍加修改的话肯定变得简洁高效优雅? 所以✍这篇文章本着了解一下Jav ...
- JavaScript--Array; Array.prototype
Array: Javascritp中Array的方法: findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. find() 方法返回数组中满足提供的测试函数的第一个 ...
最新文章
- AMS重要的数据结构解析(二):TaskRecord
- python3.7安装numpy模块-CENTOS7 Python3.7安装numpy
- oracle11g中SQL优化(SQL TUNING)新特性之Adaptive Cursor Sharing (ACS)
- servlet——请求乱码问题解决
- 【Python基础】如何编写简洁美观的Python代码
- fatal error C1083: Cannot open include file: 'ceconfig.h': No such file or directory
- 【mDNS】本地DNS解析协议
- 算法63----丑数【动态规划】
- echarts散点图搭配时间轴
- How to find error message from OMS repository
- paip.账务系统的安全性
- MySQL函数-递归函数
- 计算机没有打字键盘显示不出来,电脑无法打字键盘没有反应怎么办 win10电脑屏幕键盘怎么打开...
- JAVA 图片压缩及png转jpg
- 普适计算Topic推荐-AMiner
- Navicat for MySQL的使用
- python3网络爬虫笔记-爬虫基础原理
- Bank相关2_金融卡IC卡知识50问
- 2009年甲骨文学院教师培训
- 手写Spring DI依赖注入,嘿,你的益达!