1. Array.prototype.flat()
es6 新增数组办法。Array.prototype.flat()
毛病:须要计算数组的维度
var arr = [ 1, [2, 21, [22, 221, [2211, 2212]]], [3, [31, 32, [33, 331]]], 4, {'name': 'jack'}]arr.flat(4); // [1,2,21,22,221,2211,2212,3,31,32,33,331,4,{'name': 'jack'}]
应用 Infinity
作为深度,开展任意深度的嵌套数组
var arr = [ 1, [2, 21, [22, 221, [2211, 2212]]], [3, [31, 32, [33, 331]]], 4, {'name': 'jack'}]arr.flat(Infinity); // [1,2,21,22,221,2211,2212,3,31,32,33,331,4,{'name': 'jack'}]
2. 数组字符串化
毛病:数组内对象无奈转换
var arr = [ 1, [2, 21, [22, 221, [2211, 2212]]], [3, [31, 32, [33, 331]]], 4, {'name': 'jack'}]arr += '';arr = arr.split(',');arr; // [1,2,21,22,221,2211,2212,3,31,32,33,331,4,[object Object]]
3. 递归
var arr = [ 1, [2, 21, [22, 221, [2211, 2212]]], [3, [31, 32, [33, 331]]], 4, {'name': 'jack'}]function reduceDimension(arr) { let result = []; let toArr = function(arr) { arr.forEach(function(item) { item instanceof Array ? toArr(item) : result.push(item) }) } toArr(arr); return result;}reduceDimension(arr);
4. reduce + concat + 递归
var arr = [ 1, [2, 21, [22, 221, [2211, 2212]]], [3, [31, 32, [33, 331]]], 4, {'name': 'jack'}]function reduceDimension(arr) { return arr.reduce(function(prev, next){ return Array.isArray(next) ? prev.concat(flattenDeep(next)) : prev.concat(next) }, [])}reduceDimension(arr);