JS中四种实现数组拍平(扁平化)的常用方法

什么叫数组拍平?

概念很简单,意思是将一个“多维”数组降维,比如:

// 原数组是一个“三维”数组
const array = [1, 2, [3, 4, [5, 6], 7], 8, 9]

// 可以降成二维
newArray1 = [1, 2, 3, 4, [5, 6], 7, 8, 9]

// 也可以降成一维
newArray2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

数组拍平也称数组扁平化、数组降维,以下四种方式是我总结的常用方法,同学们直接拷贝可用。

一、while遍历

const arr1 = [1, 2, 3, [4, 5, [7, 8]]];
const flatten = function (arr) {
  while (arr.some((v) => Array.isArray(v))) {
    arr = [].concat(...arr);
  }
  return arr;
};
console.log(flatten(arr1));

二、map方法

const arr2 = [1, 2, 3, [4, 5, [7, 8]]];
const flatten2 = function (arr) {
  return [].concat(
    ...arr.map((v) => (Array.isArray(v) ? flatten2(v) : v))
  );
};
console.log(flatten2(arr2));

三、reduce方法

const arr3 = [-1, [0, 1], [2, 3], [4, [5, 6, 7]]];
function flatten3(arr) {
  return arr.reduce(
    (pre, cur) => pre.concat(Array.isArray(cur) ? flatArr3(cur) : cur),
    []
  );
}
console.log(flatten3(arr2));

四、flat(Infinity)方法

const arr4 = [-1, [0, 1], [2, 3], [4, [5, 6, 7]]];
const flatArr = arr4.flat(Infinity);
console.log(flatArr);

同学们验证之后感觉怎么样,都是一句代码搞定,便捷而高效,如果您有更牛掰的方式,也欢迎留言补充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容