js中实现数组扁平化的几种方法
1、使用递归
function flattenArray(arr) {
let result = [];
arr.forEach(item => {
if (Array.isArray(item)) {//循环item判断是否为数组
//result = result.concat(flattenArray(item));
//如为数组则使用concat连接两个数组达到扁平化,后则继续递归实现多维变一维
result = flattenArray(result.concat(item));//两种方式都可以,个人更喜欢这种
} else {
result.push(item);//不是则push进result
}
});
return result;
}
flattenArray([1, [2, [3, [4, 5]]]])//[1, 2, 3, 4, 5]
2、使用reduce函数
依旧使用concat函数实现两个数组的拼接实现扁平化
function flattenArray(arr) {
return arr.reduce((result, item) => {
return result.concat(Array.isArray(item) ? flattenArray(item) : item);
}, []);
}
小tips:reduce函数的回调接受的第一个值为累积值,第二个值为当前值,而回调后的值为可选参数,表示初始的累积值。(在本例子中为[])
3、使用扩展运算符(ES6)
扩展运算符 … 可以用于展开数组,将数组中的元素提取出来作为独立的参数或者合并到另一个数组中。
使用while循环和Array.prototype.some方法判断数组中是否还有子数组。
function flattenArray(arr) {
while (arr.some(item => Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
小tips:some方法,该方法判断数组中是否有某一项符合回调函数的条件,符合则返回true
- 使用flat方法(ES2019或为ES10)
//flat 方法的语法:arr.flat ( [depth] ) depth默认为1
//例如let a = [1,[2,3]] a.flat(1) [1,2,3]
function flattenArray(arr) {
return arr.flat(Infinity);//这里传递的参数为处理多少层,通过传递Infinity作为参数,可以处理任意层级的嵌套数组。
}
以上是常见的几种方法,每种方法都有其优缺点和适用场景。选择哪种方法取决于具体的需求和代码环境,加油学习吧少年