JS多维数组转一维
2015-06-05 23:33
573 查看
题目:
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:不使用递归),欢迎留言告知,不甚感激。相关文章推荐
- Javascript表达式中连续的 && 和 || 之赋值区别
- 函数传参和实际应用—JS学习笔记2015-6-5(第49天)
- 【js】解压缩的问题
- JavaScript Style Attributes
- 事件冒泡与事件捕获
- Javascript 多浏览器兼容性问题
- js 变量类型、相互转换
- js获取项目根目录
- JavaScript基础
- JSP请求页面(传参)
- 【JSOI 2008】【BZOJ 1016】最小生成数计数
- JSP基本用法(一)运行机制和语法
- a标签中的href,onclick,#,javascript:void简要分析 (转载)
- JSP运行机制
- JS 判断某个变量是否为空
- JavaScript学习笔记(三)
- js闭包
- js设置html标签的onclick函数
- jsp页面传中文参数乱码问题
- JavaScript中单引号和双引号的效果的一点区别