【算法图解|2】JavaScript 如何实现数组扁平化

141 阅读1分钟

数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。

举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,

var arr = [1, [2, [3, 4]]];
console.log(flatten(arr)) // [1, 2, 3, 4]

 我们最一开始能想到的莫过于循环数组元素,如果还是一个数组,就递归调用该方法:

// 这一种方法通过递归来实现,当元素为数组时递归调用,兼容性好
function flattenArray(array) {
  if (!Array.isArray(array)) return;
  let result = [];
  result = array.reduce(function (pre, item) {
    // 判断元素是否为数组,如果为数组则递归调用,如果不是则加入结果数组中
    return pre.concat(Array.isArray(item) ? flattenArray(item) : item);
  }, []);
  return result;
}
// 这一种方法是利用了 toString 方法,它的一个缺点是改变了元素的类型,只适合于数组中元素都是整数的情况
function flattenArray(array) {
  return array.toString().split(",").map(function (item) {
    return +item;
  })
}