对于前端项目开发过程当中,偶尔会出现层叠数据结构的数组,咱们须要将多层级数组转化为一级数组(即提取嵌套数组元素最终合并为一个数组),使其内容合而且展开。那么该如何去实现呢?html
flat
flat()
方法会按照一个可指定的深度递归遍历数组,并将全部元素与便利到的子数组中的元素合并为一个新数组返回。不考虑他所谓指定深度,直白一点来讲,就是数组扁平化,也就是把一个有多层嵌套的数组,提取为一个只有一层的数组。前端
var newArray=arr.flat(depth)web
depth
(可选参数)指定要提取嵌套数组的结构深度,默认值为1数组
var arr=['one','two','three',['red','green',[1,2,3],'blue']];
var result=arr.flat();
console.log(result);
复制代码
从引言部分看到一个大概的解释,“按照一个指定的深度递归遍历数组”,这个参数depth就是所说的深度,也就是可以指定遍历到多少层的层数,直接拿例子说话:bash
var arr=['red',[1,2,[3,4,[5,6,[7,8,[9,10],11,12]]]]];
console.log(arr.flat());
console.log(arr.flat(2));
console.log(arr.flat(3));
console.log(arr.flat(4));
console.log(arr.flat(Infinity));
复制代码
Infinity
做为参数就直接剥光了!
需求: 多维数组->一维数组数据结构
let ary = [1, [2, [3, [4, 5]]], 6];
ui
除了直接用flat
,还有如下几种方法spa
都是我目前理解不了的办法,就先看看吧3d
方法一:code
ary = str.replace(/(\[\]))/g, '').split(',');
复制代码
方法二:
let ary = [1, [2, [3, [4, 5]]], 6];
let str = JSON.stringify(ary);
str = str.replace(/(\[\]))/g, '');
str = '[' + str + ']';
ary = JSON.parse(str);
复制代码
方法三:
let result = [];
let fn = function(ary) {
for(let i = 0; i < ary.length; i++) }{
let item = ary[i];
if (Array.isArray(ary[i])){
fn(item);
}
else {
result.push(item);
}
}
复制代码
方法四:
while (ary.some(Array.isArray)) {
ary = [].concat(...ary);
}
复制代码
参考: JS数组扁平化