面试题-js数组扁平化
这是我参与更文挑战的第3天,活动详情查看: 更文挑战
写在前面:
数组扁平化是指将一个多维数组变为一维数组,如:
将多维数组:
[1, [2, 3, [4, 5]]]
转为一维数组:
[1, 2, 3, 4, 5]
如何实现?
1.reduce
function flatten(arr) {
return arr.reduce((result, item)=> {
return result.concat(Array.isArray(item) ? flatten(item) : item);
}, []);
}
reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值;
result为结果数组,item为reduce函数每次遍历出来的数组元素,其中使用了concat函数将两个数组连接合并。
concat() 方法用于连接两个或多个数组;该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
2.split
function flatten(arr) {
return arr.toString().split(',').map(function(item) {
return Number(item);
})
}
function flatten(arr) {
return arr.join(',').split(',').map(function(item) {
return parseInt(item);
})
}
调用数组的toString | join方法,将数组变为字符串然后再用split分割还原为数组。
3.flat
//arr.flat(num);
arr.flat(Infinity);
该flat()方法创建一个新数组,其中所有子数组元素都以递归方式连接到该数组中,直到达到指定的深度。
num值:指定遍历到多维数组中的深度,默认值为1,也就是说,如果是三维数组,并且num=1时,那么就会得到一个二维数组。
Infinity:用于存放表示正无穷大的数值。在这里使用则是将多维数组都转成一维数组。
4.正则
JSON.stringify(arr).replace(/\[|\]/g, '').split(',');
JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']')
5.递归
const fn = arr => {
for (let i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
fn(arr[i]);
} else {
res5.push(arr[i]);
}
}}
fn(arr);
解决思路
总结了这几种方式,其实归根结底还是遍历+递归的逻辑;这其中考察的是对js的诸多函数的理解和使用。
公众号:Ijiran的编程思维,随缘关注。转载请注明地址,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)