js算法之数组展平

it2022-05-05  57

用递归实现

数组展平 [[1,2],[[3],4]]=>[1,2,3,4]; 这里是一个多维的数组,展平,这里先用递归来做: 用数学的方法思考: 对数组S={a1,a2,,...,an},函数F将数组展平F(S)=F(a1)∪F(a2)∪...∪F(an)如果F(ai)等于数字则F(ai)=ai,如果F(ai)等于数组则F(ai)=F(ai)用代码将数学表达式对应的表达出来 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


最新回复(0)