數組扁平化:將一個多維數組變為一維數組
// 二維數組 const arr = [1, [2,3],[4,5]]; const flatArr1 = arr.join().split(","); // 方法1
const flattArr2 = arr.toString().split(","); // 方法2
arr.join(separator): 將數組中的所有元素放入一個字符串。separator:指定數組元素組成新字符串時的分隔符,不填寫時,默認逗號為分隔符。
str.split(separator, any): 把字符串分割為字符串數組。 separator: 從該參數指定的符號處,將字符串分割為數組。
arr.toString(): 把數組轉換為字符串,並返回結果。返回值與沒有參數的 join() 方法返回的字符串相同。
// 多維數組 const arr = [1,[2,[3,[4]]]]; const flatArr3 = arr.flat(4); // 方法3
arr.flat(num): 用於將嵌套的數組“拉平”,變成一維的數組。返回一個新數組,對原數據沒有影響。num:可選。默認為2,即拉平兩層數組。如果拉平多層,可用關鍵字Infinity作為參數。falt()方法會跳過數組中的空位。
// 多維數組 方法4 var arr = [1,[2],[3,[4]],[5,[6,[7,8]]]]; flatArr4= (arr)=> [].concat(...arr.map(v => Array.isArray(v) ? deepFlattenFn(v): v)) flatArr4(arr)
arr.concat(arr1,arr2,...,arrN): 連接兩個或多個數組。參數可以是具體的值,也可以是數組對象。可以是任意多個。
// 多維數組 方法5 const flatten= arr => arr.reduce((item, next) => item.concat( Array.isArray(arr)? flatten(next): next, []));
arr.reduce(): 函數累加器,接受一個函數作為參數,對數組中的值從左到右依次進行處理。
語法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
initialValue: 傳遞給函數的初始值,可選。
function:函數參數
total: 必需。初始值
currentValue:必需。當前元素
currentIndex:可選。當前元素的索引
arr:可選。當前元素所處的數組對象