亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何折疊多維數組

如何折疊多維數組

qq_遁去的一_1 2021-11-18 09:37:21
怎么做?unpack_array([1, [10, 30, 40,[34,53],4],2]) -> [1,10,30,40,34,53,4,2]我知道必須應用遞歸。我試過了,但結果只在一個方向上起作用。function unpack_array (arr, acc_arr=[]) {  if (!arr) return acc_arr;  let i = 0;  while (arr[i] && !Array.isArray(arr[i])) {    acc_arr.push(arr[i++])  }  return unpack_array(arr[i], acc_arr)}相信這里需要用到“reduce”的方法。
查看完整描述

2 回答

?
SMILET

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]));


查看完整回答
反對 回復 2021-11-18
?
胡子哥哥

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),并得到一個數組回來。


查看完整回答
反對 回復 2021-11-18
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號