📅  最后修改于: 2023-12-03 15:40:03.428000             🧑  作者: Mango
在 Javascript 中,数组展平是一个重要的操作,它可以将多层嵌套的数组变成一层,使得数组中所有的元素都在同一级别上。这个操作对于数组的处理、算法实现以及数据分析非常有帮助。本文将介绍数组展平的方式、实现和应用。
在 Javascript 中,有多种方式可以将数组展平:
flat()
方法可以将一个多维数组平铺成一个一维数组,可以控制平铺的深度,例如:
const arr = [1, [2, [3, [4, [5]]]]];
const flatArr = arr.flat(Infinity);
console.log(flatArr); // [1, 2, 3, 4, 5]
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]
数组展平可以应用于以下场景:
可以使用 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]
可以使用 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]
可以使用扁平化后的数组进行数据分析,例如计算平均值、中位数、最大值等等。
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