關於:數組扁平化
簡單概念:將一個維度很深的數組 -------》展開成一維數組
我們先定義一個函數:判斷是否為數組
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), [])