2 回答

TA貢獻1796條經驗 獲得超4個贊
該Array.prototype.flat()方法將起作用,只要您為其提供參數 ofInfinity以確保多維數組的所有級別都被展平:
console.log([1, [10, 30, 40, [34, 53], 4], 2].flat(Infinity))
作為替代方案,鏈接的文檔建議使用遞歸flatDeep方法,該方法使用reduce并concat實現所需的行為:
function flatDeep(arr) {
return arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val) : val), []);
};
console.log(flatDeep([1, [10, 30, 40, [34, 53], 4], 2]));

TA貢獻1825條經驗 獲得超6個贊
一種簡單的遞歸方法是調用Array#reduce并使用Array#concat將每個項目組合成單個結果,但也遞歸調用unpack_array該項目。這樣你就可以處理任何深度的嵌套數組:
function unpack_array(arr) {
if (!Array.isArray(arr)) return [arr];
return arr.reduce((acc, item) => acc.concat(unpack_array(item)), [])
}
console.log(unpack_array([1, [10, 30, 40,[34,53],4],2]))// -> [1,10,30,40,34,53,4,2]
遞歸的終止條件是如果您到達一個不是數組的項目。你不必須做return [arr]在這種情況下,簡單的return arr也可以,但是它只是更一致的這樣-你可以打電話unpack_array(7),并得到一個數組回來。
添加回答
舉報