📜  数组展平 - Javascript (1)

📅  最后修改于: 2023-12-03 15:40:03.428000             🧑  作者: Mango

数组展平 - Javascript

在 Javascript 中,数组展平是一个重要的操作,它可以将多层嵌套的数组变成一层,使得数组中所有的元素都在同一级别上。这个操作对于数组的处理、算法实现以及数据分析非常有帮助。本文将介绍数组展平的方式、实现和应用。

数组展平的方式

在 Javascript 中,有多种方式可以将数组展平:

1. 使用 flat() 方法

flat() 方法可以将一个多维数组平铺成一个一维数组,可以控制平铺的深度,例如:

const arr = [1, [2, [3, [4, [5]]]]];
const flatArr = arr.flat(Infinity);
console.log(flatArr); // [1, 2, 3, 4, 5]
2. 使用 reduce() 方法

reduce() 方法也可以实现数组展平,可以将一个多维数组完全展平成一个一维数组,例如:

const arr = [1, [2, [3, [4, [5]]]]];
const flatArr = arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(val.reduce((a, v) => a.concat(v), [])) : acc.concat(val), []);
console.log(flatArr); // [1, 2, 3, 4, 5]
数组展平的实现

以下是使用递归实现数组展平的 Javascript 代码:

function flatten(arr) {
  let flatArr = [];
  arr.forEach(el => {
    Array.isArray(el) ? flatArr.push(...flatten(el)) : flatArr.push(el);
  });
  return flatArr;
}

const arr = [1, [2, [3, [4, [5]]]]];
const flatArr = flatten(arr);
console.log(flatArr); // [1, 2, 3, 4, 5]
数组展平的应用

数组展平可以应用于以下场景:

1. 数组去重

可以使用 Set 对象去重,也可以使用 reduce() 方法实现去重:

const arr = [1, 1, [2, [3, [3, 4]]]];
const uniqueArr = arr.reduce((acc, val) => acc.includes(val) ? acc : acc.concat(val), []);
console.log(uniqueArr); // [1, 2, 3, 4]
2. 数组扁平化后排序

可以使用 sort() 方法对扁平化后的数组排序:

const arr = [3, 7, [8, [9, 1, [10, 6], 2], 5], 4];
const sortedArr = flatten(arr).sort((a, b) => a - b);
console.log(sortedArr); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3. 数组扁平化后分析数据

可以使用扁平化后的数组进行数据分析,例如计算平均值、中位数、最大值等等。

const arr = [3, 7, [8, [9, 1, [10, 6], 2], 5], 4];
const flatArr = flatten(arr);
const sum = flatArr.reduce((acc, val) => acc + val, 0);
const avg = sum / flatArr.length;
console.log(avg); // 5.5