有時候會遇到一個數組裏邊有多個數組的狀況(多維數組),而後你想把它拉平使其成爲一個一維數組,其實最簡單的一個方法就是ES6數組方法Array.prototype.flat。使用方法以下:數組
const lists = [1, [2, 3, [4, 5]]]; lists.flat(); // [1, 2, 3, [4, 5]],默認只拉平一層,若是想要所有拉平,參數換爲Infinity便可
但是實際有些狀況下,須要去兼容低版本的問題處理,因此就本身寫了兩種解決方案,根據本身喜歡使用,不過沒支持Infinity這個處理方式,僅是做爲自定義拉平數組。prototype
1.遞歸code
const lists = [1, [2, 3, [4, 5]]]; function reduceArr(list, depth) { if(depth === 0) return list; let result = []; for(let i = 0;i < list.length;i++) { if(Array.isArray(list[i])) { result = result.concat(list[i]); } else { result.push(list[i]); } } return reduceArr(result, --depth); } console.log(reduceArr(lists, 2));
2.循環處理遞歸
const lists = [1, [2, 3, [4, 5]]]; function reduceArr(list, depth) { let result = []; for(let i = 1;i <= depth;i++) { result.length && (list = result); result = []; for(let j = 0;j < list.length;j++) { if(Array.isArray(list[j])) { result = result.concat(list[j]); } else { result.push(list[j]); } } } if(depth) { return result; } else { return list; } } console.log(reduceArr(lists, 2));