用递归实现
数组展平 [[1,2],[[3],4]]=>[1,2,3,4];
这里是一个多维的数组,展平,这里先用递归来做:
用数学的方法思考:
对数组S={a
1,a
2,,...,a
n},函数F将数组展平F(S)=F(a
1)∪F(a
2)∪...∪F(a
n)如果F(a
i)等于数字则F(a
i)=a
i,如果F(a
i)等于数组则F(a
i)=F(a
i)用代码将数学表达式对应的表达出来
let arr = [[1,2],[[3],4
]]
function flatten(arr) {
return [].concat(
...arr.map(x=>
Array.isArray(x) ?
flatten(x):x
)
)
}
console.log(flatten(arr))// ->[1,2,3,4]
用生成器实现
和有递归实现的优势:比较容易思考
function*
flatten(arr) {
for(let i = 0;i < arr.length; i++
) {
if(Array.isArray(arr[i])) {
yield *
flatten(arr[i])
} else {
yield arr[i]
}
}
}
console.log([...flatten([1,2,3,[3,4,[4,5
]]])])
//[ 1, 2, 3, 3, 4, 4, 5 ]
转载于:https://www.cnblogs.com/fanzhanxiang/p/10302146.html