js 將巢狀陣列展平的方法一覽
展平陣列
陣列中可以巢狀陣列,要巢狀多少層都可以,比如[1, 2, [[3], 4]]
這樣看起來很不爽,所以我們要把它展開,只留下一層陣列: [1, 2, 3, 4]
結果:
flatten([1, 2, 3]) // [1, 2, 3]
flatten([1, 2, [3]]) // [1, 2, 3]
flatten([1, 2, [[3], 4]]) // [1, 2, 3, 4]
flatten([1, [2, [[3], [4]]]]) // [1, 2, 3, 4]
方法一:普通方法
function flattenMd(arr){
var result=[]
function flatten(arr){
for (var i = 0; i
並沒有什麼好說的
方法二:陣列concat方法
傳遞給concat方法的引數序列中如果包含陣列,則會將這個陣列的每一項新增到結果陣列中,這就使陣列的這個方法具有了天然的展開二維陣列的能力
function flatten2d(arr) {
var result = [];
for(var i = 0; i
上面的方法還可以進一步簡化。我們知道apply方法是可以直接接受陣列引數,這樣我們連迴圈迭代都省了。
function flatten2d(arr) {
return Array.prototype.concat.apply([], arr);
// return [].concat.apply([],arr);
}
但是上述方法只能降低一維。因此我們需要使用迭代:
function flattenMd(arr) {
var result = [];
for(var i = 0; i
還可以使用遞迴
function flatten(arr) {
return arr.reduce(function (plane, toBeFlatten) {
return plane.concat(Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten);
}, []);
}
遞迴的簡化版
flatten = function (arr) {
return arr.reduce((plane, toBeFlatten) => (plane.concat(Array.isArray(toBeFlatten) ? flatten(toBeFlatten) : toBeFlatten)), []);
}
再簡化
flatten = arr => arr.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);
方法三:利用ES6的展開符
function flatten(arr) {
return [].concat(...arr)
}
但是隻能降低一維 因此使用遞迴
function deepFlatten(arr) {
flatten = (arr)=> [].concat(...arr);
return flatten(arr.map(x=>Array.isArray(x)? deepFlatten(x): x));
}
方法四:陣列join和split方法的結合(只適用於數字陣列)
function flattenMd(arr) {
return arr.join().split(',');
}
var arr=['1', [null, 3, [4, 5], {K:1}], undefined, 8]
console.log(flattenMd(arr));//[ '1', '', '3', '4', '5', '[object Object]', '', '8' ]
缺陷:
- 所有型別的元素都會變成字串
-
null
、undefined
會變成空字串、物件會變成[object Object]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/964/viewspace-2798017/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JS 物件與陣列互相巢狀的複雜例子JS物件陣列巢狀
- JS陣列的方法JS陣列
- iOS開發·runtime+KVC實現多層字典模型轉換(多層資料:模型巢狀模型,模型巢狀陣列,陣列巢狀模型)iOS模型巢狀陣列
- js 陣列方法JS陣列
- JS 陣列的迭代方法JS陣列
- js陣列常見的一些方法JS陣列
- JS陣列基本方法JS陣列
- js常用陣列方法JS陣列
- Js陣列方法解析JS陣列
- js陣列方法集合JS陣列
- JS陣列方法總覽及遍歷方法耗時統計JS陣列
- 陣列展平函式陣列函式
- js 陣列的方法小結JS陣列
- js將陣列轉字元,字元轉回陣列JS陣列字元
- 展開巢狀列表巢狀
- 【JS】JS陣列新增元素的三種方法JS陣列
- js陣列方法詳解JS陣列
- js陣列方法之ReduceJS陣列
- js陣列方法(管飽)JS陣列
- JS陣列方法總結JS陣列
- JS陣列字串方法整理JS陣列字串
- C++容器巢狀實現動態二維陣列C++巢狀陣列
- JS專題之陣列展開JS陣列
- js 物件轉為js陣列 && Object方法JS物件陣列Object
- JS-陣列方法總結JS陣列
- js陣列常用方法總結JS陣列
- JS陣列Array的全部方法彙總JS陣列
- JS陣列去重的10種方法JS陣列
- JS中字串和陣列的常用方法JS字串陣列
- JS陣列去重的幾種方法JS陣列
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- JavaScript中if巢狀assert的方法JavaScript巢狀
- JS 兩組陣列取不同值組成新陣列的方法JS陣列
- js陣列的一些用法JS陣列
- 使用swiper.js建立巢狀的swiperJS巢狀
- js模板引擎art template陣列渲染的方法JS陣列
- JS中陣列的遍歷方法(3種)JS陣列