关于:数组扁平化
简单概念:将一个维度很深的数组 -------》展开成一维数组
我们先定义一个函数:判断是否为数组
function isArray(arr) { var arrStr = '[object Array]'; return Object.prototype.toString.call(arr) == arrStr; }
实现方式一:
function flatten(arr) { var arr = arr || [], resArr = [], len = arr.length; for (var i = 0; i < len; i++) { if (isArray(arr[i])) { resArr = resArr.concat(flatten(arr[i])); } else { resArr.push(arr[i]) } } return resArr; }
实现方式二:

Array.prototype.flatten = function () { var resArr = []; // var len = this.length; // for(var i = 0; i < len; i++) { // if(isArray(this[i])) { // resArr = resArr.concat(this[i].flatten()); // }else{ // resArr.push(this[i]) // } // } this.forEach(function (item) { Object.prototype.toString.call(item) == '[object Array]' ? resArr = resArr.concat(item.flatten()) : resArr.push(item); }) return resArr; }
实现方式三:

function newFlatten(arr) { var arr = arr || []; return arr.reduce(function (prev, next) { return Object.prototype.toString.call(next) == '[object Array]' ? prev.concat(newFlatten(next)) : prev.concat(next); }, []) }
实现方式四:一行代码 (es6)
const flattenNew = arr => arr.reduce((prev, next) => Object.prototype.toString.call(next) == '[object Array]' ? prev.concat(flattenNew(next)) : prev.concat(next), [])