對於前端項目開發過程當中,偶爾會出現層疊數據結構的數組,咱們須要將多層級數組轉化爲一級數組(即提取嵌套數組元素最終合併爲一個數組),使其內容合而且展開。那麼該如何去實現呢?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數組扁平化