返回

数组扁平化:化繁为简,六种方法任你选

前端

导语

在编程的世界里,数组是一个强大的数据结构,它可以存储一组有序的数据。但当数组嵌套时,就会变得复杂起来。此时,数组扁平化技术便闪亮登场,将多维数组巧妙地转换成一维数组,让数据处理变得更加轻松。在这篇文章中,我们将深入探讨六种JavaScript数组扁平化的方式,从经典的递归到现代的FlatMap方法,带你领略数组扁平化的魅力。

什么是数组扁平化?

想象一下,你有一张多层的嵌套数组,就像俄罗斯套娃一样。数组扁平化就是将这些套娃一层层解开,最终得到一个包含所有元素的平坦数组。例如,把嵌套数组[1,2,[3,4,5,[6,7,8]]]扁平化后,就会变成一维数组[1,2,3,4,5,6,7,8]

六种数组扁平化方法

1. 递归(经典方法)

function flatten(arr) {
  let newArr = [];
  for (let i of arr) {
    if (Array.isArray(i)) {
      newArr = newArr.concat(flatten(i));
    } else {
      newArr.push(i);
    }
  }
  return newArr;
}

2. Spread运算符

function flatten(arr) {
  return arr.reduce((acc, cur) => acc.concat(Array.isArray(cur) ? flatten(cur) : cur), []);
}

3. FlatMap方法(ES6)

function flatten(arr) {
  return arr.flatMap(item => Array.isArray(item) ? flatten(item) : item);
}

4. forEach + push

function flatten(arr) {
  const newArr = [];
  arr.forEach(item => {
    if (Array.isArray(item)) {
      flatten(item).forEach(i => newArr.push(i));
    } else {
      newArr.push(item);
    }
  });
  return newArr;
}

5. [].concat.apply([], arr)

function flatten(arr) {
  return [].concat.apply([], arr);
}

6. JSON.stringify + JSON.parse

function flatten(arr) {
  return JSON.parse(JSON.stringify(arr).replace(/\[|\]/g, ''));
}

选择合适的方法

这六种方法各有千秋,选择哪种取决于具体情况和性能考虑。总体来说,对于小型数组,递归或Spread运算符比较高效;对于大型数组,FlatMap方法或[].concat.apply([], arr)更胜一筹。

总结

数组扁平化是一种强大的技术,它可以简化嵌套数组的处理,让数据更加易于使用。通过了解六种不同的扁平化方法,你可以根据具体需求选择最合适的一种。从经典的递归到现代的FlatMap,掌握这些技巧,将让你在JavaScript编程中如虎添翼。