前端面试题 - 数组扁平化方法总结

数组扁平化 1. Array.prototype.flat(depth)方法
2. 转换成字符串
2.1 toString + map + parseInt

var arr = [[1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11, [12, 13, [14, 15, 16]]], 17], str = arr.toString(), // '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17' strArr = str.split(','), // ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17'] res = strArr.map(item => parseInt(item)) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

2.2 toString + JSON.parse
var arr = [[1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11, [12, 13, [14, 15, 16]]], 17], str = arr.toString(), // '1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17' jsonStr = '[' + str + ']', // '[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]' res = JSON.parse(jsonStr) // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]

3. 递归
function flat(array) { /* 递归 */ var _res = [], dfs = function (arr) { for (let i = 0; i < arr.length; i++) { Object.prototype.toString.call(arr[i]) === '[object Array]' ? dfs(arr[i]) : _res.push(arr[i]) } }dfs(array)return _res }

4. 迭代
function flat(array) { /* 迭代 */ var queue = [array], res = [], nextwhile (queue.length) { next = queue.shift()Object.prototype.toString.call(next) === '[object Array]' ? Array.prototype.push.apply(queue, next) : res.push(next) }return res }

    推荐阅读