什么叫数组拍平?
概念很简单,意思是将一个“多维”数组降维,比如:
// 原数组是一个“三维”数组
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));
reduce遍历
const arr4 = [-1, [0, 1], [2, 3], [4, [5, 6, 7]]];
const flatArr = arr4.flat(Infinity);
console.log(flatArr);
同学们验证之后感觉怎么样,都是一句代码搞定,便捷而高效,如果您有更牛掰的方式,也欢迎留言补充。
网友评论