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

数组扁平化

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
}

你可能感兴趣的:(前端javascript)