1、flat() 方法将以指定的深度递归遍历数组,并将所有元素与遍历的子数组中的元素合并到一个新数组中以返回。
const arr = [1,[2,[3,[4,5]]],6] // 方法一:数组自带的扁平化方法,flat的参数代表的是需要展开几层,如果是Infinity的话,就是不管嵌套几层,全部都展开 console.log(arr.flat(Infinity))
2、使用正则
- 首先是使用 JSON.stringify 把 arr 转为字符串
- 接着使用正则把字符串里面的 [ 和 ] 去掉
- 然后再拼接数组括号转为数组对象
1 const arr = [1,[2,[3,[4,5]]],6] 2 const res = JSON.stringify(arr).replace(/\[|\]/g,'') 3 const res2 = JSON.parse('[' + res + ']') 4 console.log(res2)
3、使用递归
递归,在数学和计算机科学中,是指在函数的定义中使用函数本身的方法。递归这个词经常用来描述以自相似的方式重复事物的过程。通俗的理解是:我调用我自己。
const array = [] const fn = (arr)=>{ for(let i = 0;i<arr.length; i++){ if(Array.isArray(arr[i])){ fn(arr[i]) } else { array.push(arr[i]) } } } fn(arr) console.log(array)
4、使用 reduce
reduce 方法: 可以用来给数组求和
concat() 方法用于连接两个或多个数组。
concat() 方法不会更改现有数组,而是返回一个新数组,其中包含已连接数组的值。
const newArr = (arr)=>{ return arr.reduce((pre,cur)=>{ return pre.concat(Array.isArray(cur) ? newArr(cur) : cur) },[]) } console.log(newArr(arr),"reduce方法")
5、使用栈的思想实现 flat 函数
// 栈思想
function flat(arr) {
const newArr = [];
const stack = [].concat(arr); // 将数组元素拷贝至栈,直接赋值会改变原数组//如果栈不为空,则循环遍历while (stack.length !== 0) {
const val = stack.pop(); // 删除数组最后一个元素,并获取它if (Array.isArray(val)) {
stack.push(...val); // 如果是数组再次入栈,并且展开了一层
} else {
newArr.unshift(val); // 如果不是数组就将其取出来放入结果数组中
}
}
return newArr;
}
let arr = [12, 23, [34, 56, [78, 90, 100, [110, 120, 130, 140]]]];
console.log(flat(arr));
// [12, 23, 34, 56, 78, 90, 100, 110, 120, 130, 140]
标签:flat,arr,const,扁平化,newArr,数组,方法 From: https://www.cnblogs.com/dingziDone/p/18084920