返回
用 ES6 Array.prototype.flat 函数实现数组降维
前端
2024-01-21 23:17:37
前言
数组降维,又称数组扁平化,是指将多维数组转换为一维数组的过程。数组降维在实际开发中经常会遇到,比如需要将一个包含子数组的数组转换为一个包含所有元素的数组,或者需要将一个多维数组转换为一个适合存储在数据库中的一维数组。
ES6 Array.prototype.flat 函数
ES6 中的 Array.prototype.flat 函数可以实现数组降维。该函数接受一个参数,指定要降维的层数。如果省略该参数,则默认将数组降维一层。
const arr = [1, [2, [3, 4]]];
console.log(arr.flat()); // [1, 2, 3, 4]
console.log(arr.flat(2)); // [1, 2, 3, 4]
从上面的示例可以看出,flat 函数可以将多维数组降维为一维数组。如果指定了降维的层数,则该函数会将数组降维到指定层数。
递归方法
除了使用 flat 函数之外,还可以使用递归的方法实现数组降维。递归的方法是通过不断地将子数组中的元素添加到主数组中,直到所有的子数组都处理完。
function flatten(arr) {
let result = [];
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
const arr = [1, [2, [3, 4]]];
console.log(flatten(arr)); // [1, 2, 3, 4]
从上面的示例可以看出,递归的方法也可以实现数组降维。但是,递归的方法可能会导致栈溢出错误,尤其是当数组的嵌套层数很深的时候。
面试题
在 bilibili 的面试中,笔者被问到了一道关于数组降维的面试题。面试题如下:
给定一个包含子数组的数组,请将该数组降维为一维数组。
笔者当时使用 flat 函数实现了数组降维,但是面试官并不满意。面试官认为 flat 函数是 ES6 中的新特性,很多浏览器还不能支持。因此,面试官要求笔者使用递归的方法实现数组降维。
笔者当时虽然知道递归的方法,但是并没有使用过。因此,笔者在面试中并没有答出这道题。
总结
通过这次面试,笔者意识到学习新技术的重要性。同时,笔者也意识到,即使不会使用新技术,也要知道新技术的存在,以便在面试中回答相关的问题。
希望本文对您有所帮助。如果您有任何问题,请随时留言。