扁平化数组的方法

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

1
2
3
const arr = [1,[2,[3,[4,5]]],6]
//  方法一:数组自带的扁平化方法,flat的参数代表的是需要展开几层,如果是Infinity的话,就是不管嵌套几层,全部都展开
console.log(arr.flat(Infinity))

2、使用正则

  1. 首先是使用 JSON.stringify 把 arr 转为字符串
  2. 接着使用正则把字符串里面的 [ 和 ] 去掉
  3. 然后再拼接数组括号转为数组对象  

 

1
2
3
4
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、使用递归

递归,在数学和计算机科学中,是指在函数的定义中使用函数本身的方法。递归这个词经常用来描述以自相似的方式重复事物的过程。通俗的理解是:我调用我自己。

1
2
3
4
5
6
7
8
9
10
11
12
13
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() 方法不会更改现有数组,而是返回一个新数组,其中包含已连接数组的值。

1
2
3
4
5
6
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]

 

 

 
posted @   钉子杂论  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示