ES6的flat方法
javascript
const arr=[1,2,[33,44,5,[6,7]],3]
// es6中的flat方法
function arr1()
{
//数组自带的扁平化方法,flat的参数代表的是需要展开几层,
//如果是Infinity的话,就是不管嵌套几层,全部都展开
return arr.flat(Infinity)
}
let result=arr1();
console.log(result)
结果:
JSON+正则
javascript
function arr2()
{
// 首先是使用 JSON.stringify 把 arr 转为字符串
// 接着使用正则把字符串里面的 [ 和 ] 去掉
// 然后再拼接数组括号转为数组对象
let arr1=JSON.stringify(arr).replace(/\[|\]/g,"");
return JSON.parse('['+arr1+']')
}
结果:
递归
javascript
function arr3() {
let myArr = [];
function fn(arr1)
{
for (let i = 0; i < arr1.length; i++) {
//判断是否是数组
if(Array.isArray(arr1[i]))
{
fn(arr1[i])
}else{
myArr.push(arr1[i])
}
}
}
fn(arr)
return myArr
}
结果:
reduce方法
javascript
function myredduce(arr)
{
// reduce 方法: 可以用来给数组求和
// concat() 方法用于连接两个或多个数组。
// concat() 方法不会更改现有数组,而是返回一个新数组,其中包含已连接数组的值。
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur) ? myredduce(cur) : cur)
},[])
}
let result = myredduce(arr);
结果:
栈思想
javascript
function mystack()
{
let newArr=[];
let 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 result = mystack(arr);
结果: