数组扁平化

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 = [],    next  while (queue.length) {    next = queue.shift()    Object.prototype.toString.call(next) === '[object Array]'      ? Array.prototype.push.apply(queue, next)      : res.push(next)  }  return res}