一、扁平化函数
(1)将每个非数组元素一个一个push到新数组,遍历到数组元素时,递归调用扁平化函数。
function flatten(arr){let flattenedArr = [];function isArray(obj){return {}.toString.call(obj) === '[object Array]'}function flattenFn(arr){arr.forEach((item)=>{if(isArray(item)){flattenFn(item)}else{flattenedArr.push(item)}})}flattenFn(arr)return flattenedArr}let arr = [1,2,[3,{},[5,[6],[7]]]];console.log(flatten(arr))
(2)创建一个新数组,遍历数组,如果遇到非数组元素,则push进新数组,如果遍历到数组元素,则递归调用该函数。利用concat,
function flatten(arr){let len = arr.length,fArr = [],item;function isArray(obj){return {}.toString.call(obj) === '[object Array]'}for(var i = 0; i < len; i++ ){item = arr[i];if(isArray(item)){fArr = fArr.concat(flatten(item))}else{fArr.push(item)}}return fArr}let arr = [1,2,[3,{},[5,[6],[7]]]];console.log(flatten(arr))
(3)利用reduce
function flatten(arr){if({}.toString.call(arr) !== '[object Array]'){throw new Error('only array is accecpted')}let farr = arr.reduce((accumulotar,item)=>{if({}.toString.call(item) === '[object Array]') {accumulotar = accumulotar.concat(flatten(item))}else{accumulotar.push(item)}return accumulotar},[])return farr}let arr = [1,2,[3,{},[5,[6],[7]]]];console.log(flatten(arr))
