扁平化
数组的扁平化其实就是将一个嵌套多层的数组 array(嵌套能够是任何层数)转换为只有一层的数组。
例如
var arr = [1, [2, [3, 4,5]]]; // [1, 2, 3, 4,5]
实现办法如下
递归
let a = [1, [2, [3, 4, 5]]];function flatten(arr) { let result = [] for (let i = 0; i < arr.length; i++) { // 如果元素是数组,数组的后果通过数组的 concat 办法拼接到最初要返回的 result 数组 if (Array.isArray(arr[i])) { result = result.concat(flatten(arr[i])) console.log(result) } else { result.push(arr[i]) } } return result}
利用 reduce 函数迭代
function flatten(arr) { return arr.reduce((prev, next) => { // 判断逻辑和递归中要害判断逻辑代码相似 return prev.concat(Array.isArray(next) ? flatten(next) : next) }, [])}
利用扩大运算符
function flatten(arr) { // 只有arr数组中还存在数组元素,循环就持续进行 while (arr.some(item => Array.isArray(item))) { // 开展数组,拼接空数组 arr = [].concat(...arr) } return arr}
split和toString()办法独特解决
function flatten(arr) { // toString()办法把数组转换为1,2,3,4,5 return arr.toString().split(",")}
ES6中flat办法
var newArray = arr.flat([depth])
depth 可选.指定要提取嵌套数组的构造深度,默认值为 1。
返回值 .一个蕴含将数组与子数组中所有元素的新数组。
Infinity示意要始终开展
function flatten(arr) { return arr.flat(Infinity)}
正则和 JSON 办法独特解决
function flatten(arr) { let str = JSON.stringify(arr); // 过滤所有的中中括号 str = str.replace(/(\[|\])/g, ''); str = '[' + str + ']'; return JSON.parse(str); }
在线网站 https://regexper.com/ 能够把正则剖析成容易了解的可视化的逻辑脑图