用递归实现
数组展平 [[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 ]