第 36 题:使用迭代的方式实现 flatten 函数
var arr=[1,2,3,[4,5],[6,[7,[8]]]]
/**
* 使用递归的方式处理
* wrap内保存结果ret
* 返回一个递归函数
*
* @returns
*/
function wrap(){
var ret=[];
return function flat(a){
for(var item of a){
if(item.constructor===Array){
ret.concat(flat(item))
}else{
ret.push(item)
}
}
return ret
}
}
console.log(wrap()(arr));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
function flatten(a) {
return Array.isArray(a) ? [].concat(...a.map(flatten)) : a;
}
为什么我老是喜欢投机取巧,哈哈
虽然不是考点,但也没啥不好的。
ES10
arr.flat(Infinity);
/**
*
*/
function flatten(arr, depth = 1) {
return arr.reduce((newArr, nextArr) => newArr.concat(depth > 1 && Array.isArray(nextArr) ? flatten(nextArr, depth - 1) : nextArr), [])
}
使用Generator实现数组flatten:
迭代实现
递归实现
字符串转换
迭代的实现:
递归的实现(ES6简写):