您的位置:首页 > Web前端 > JavaScript

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:不使用递归),欢迎留言告知,不甚感激。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: