题目:

  var array = [1, [2, [3, 4], [5, 6]], 7, 8];

  写一个方法 flatArray(),得到数组 [1, 2, 3, 4, 5, 6, 7, 8]

解答:

  1.低端写法(调用原生方法):

function flatArray(arr) {
var temp = arr.join().split(','),
len = temp.length,
result = [];
for(var i=0; i<len; i++) {
result.push(parseInt(temp[i]));
}
return result;
}

  2.普通写法1(递归思想):

function flatArray(arr) {
var result = [];
for(var i = 0, l = arr.length; i < l; i++){
if(arr[i] instanceof Array) {
result = result.concat(arguments.callee(arr[i]));
// 或result = result.concat(flatArray.call(this, arr[i]));
}
else {
result.push(arr[i]);
}
}
return result;
}

  3.普通写法2(利用forEach和三元表达式减少代码量,可读性较差)

function flatArray(arr) {
var result = [];
arr.forEach(function(item, index, origin){
Array.isArray(item) ? result = result.concat(flatArray(item)) : result.push(item);
})
return result;
}

  4.高端写法(闭包思想):

var flatArray = function(ret) {
function toArr(arr) {
arr.forEach(function(item) {
item instanceof Array ? toArr(item) : ret.push(item);
});
} return function(arr) {
toArr(arr);
return ret;
} }([]);

PS:   

  如有更好的算法(eg:不使用递归),欢迎留言告知,不甚感激。

最新文章

  1. 1Z0-053 争议题目解析
  2. java设计模式之状态模式
  3. [转]Mac下配置基于SecurID的Cisco IPSec VPN全攻略(有图)
  4. .Net Core + Angular2 环境搭建
  5. oracle表结构和表内容差异比对
  6. 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo
  7. Camera 图像处理原理分析
  8. CAGradientLayer
  9. 漫谈php全局变量Global
  10. HTML&amp;CSS基础学习笔记1.15-合并单元格
  11. C#/VB.NET对EXCEL图片添加超链接
  12. 在Jenkins中配置执行远程shell命令
  13. php使用root用户启动
  14. HBuild 连接安卓手机
  15. gradle安装操作
  16. 关于DDS的基础知识
  17. nginx跨域配置(windos走过的坑)
  18. css布局 - 垂直居中布局的一百种实现方式(更新中...)
  19. sharepoint 2010 怎样在Ribbon区加入功能button
  20. (字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)

热门文章

  1. poj2492 A Bug&#39;s Life【基础种类并查集】
  2. 字符串匹配算法(KMP)
  3. css基本框架
  4. c语言单链表,冒泡排序
  5. 块元素block,内联元素inline; inline-block;
  6. document.domain与js跨域的问题
  7. 用200行Python代码“换脸”
  8. 基于visual Studio2013解决C语言竞赛题之0203格式化输出
  9. PHP 自学之路-----XML编程(Xpath技术,simpleXml技术)基础入门
  10. Exam(贪心)