toString()之后再split(',')转成数组,并将其转换回数字数组:
var arr = [1, [2, [3, 4],[5,[6],[7,8]]]]; var arrStr = arr.toString(); console.log(arrStr);//1,2,3,4,5,6,7,8 var strArr = arrStr.split(','); console.log(strArr)//["1", "2", "3", "4", "5", "6", "7", "8"]
方式二和方式三 的场景只适用于数组内全部是数字的情况,因为中间是全部转换为字符串了。
方法四: 使用reduce和concat方法
Array.prototype.flatten=function(){ return this.reduce(function(prev, cur) { var moreArr = [].concat(cur).some(Array.isArray); //判断cur是不是一个数组 return prev.concat(moreArr ? cur.flatten() : cur); },[]); }; var arr=a.flatten();
//合并二维数组 var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']]; var oneArr = twoArr.reduce(function(total,currentValue){ // console.log(total) return total.concat(currentValue); }) console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
var arr = [1,2,3,4,5,6,7,8,9,10] var str = arr.reduce(function(prev,cur,index,arr){ return prev + cur ; }) console.log(str)//55
方式五:es6扩展运算符
function flatten(arr){ while(arr.some(item=>Array.isArray(item)){ arr = [].concat(...arr); } return arr; }
由于扩展运算符一次只能展开一层数组:
var arr = [1, [2, [3, 4]]]; console.log([].concat(...arr)); // [1, 2, [3, 4]]
因此考虑只要数组中还有数组,就使用扩展运算符展开一次。
若有不足请多多指教!希望给您带来帮助!
总结