JS中flat---提取嵌套数组元素

引言

对于前端项目开发过程当中,偶尔会出现层叠数据结构的数组,咱们须要将多层级数组转化为一级数组(即提取嵌套数组元素最终合并为一个数组),使其内容合而且展开。那么该如何去实现呢?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);
复制代码

上面也提到了,flat的默认参数是1,那么这个参数究竟起到什么做用呢?

从引言部分看到一个大概的解释,“按照一个指定的深度递归遍历数组”,这个参数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数组扁平化

相关文章
相关标签/搜索