JS多维数组转一维
2024-10-11 05:58:03
题目:
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:不使用递归),欢迎留言告知,不甚感激。
最新文章
- 1Z0-053 争议题目解析
- java设计模式之状态模式
- [转]Mac下配置基于SecurID的Cisco IPSec VPN全攻略(有图)
- .Net Core + Angular2 环境搭建
- oracle表结构和表内容差异比对
- 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo
- Camera 图像处理原理分析
- CAGradientLayer
- 漫谈php全局变量Global
- HTML&;CSS基础学习笔记1.15-合并单元格
- C#/VB.NET对EXCEL图片添加超链接
- 在Jenkins中配置执行远程shell命令
- php使用root用户启动
- HBuild 连接安卓手机
- gradle安装操作
- 关于DDS的基础知识
- nginx跨域配置(windos走过的坑)
- css布局 - 垂直居中布局的一百种实现方式(更新中...)
- sharepoint 2010 怎样在Ribbon区加入功能button
- (字符串处理)Fang Fang -- hdu -- 5455 (2015 ACM/ICPC Asia Regional Shenyang Online)