Fcc闖關題算法 --- Steamroller

題目描述

對嵌套的數(shù)組進行扁平化處理。你必須考慮到不同層級的嵌套。如果你被卡住了,

? 記得開大招 Read-Search-Ask。嘗試與他人結伴編程、編寫你自己的代碼。

提供的資源:

Array.isArray()

往下繼續(xù)之前, 希望你花兩分鐘看看這個Fcc 須知

題目解析

理解題意

何為扁平化處理.

  • steamroller([[["a"]], [["b"]]]) 應該返回 ["a", "b"] 就是把數(shù)組中空的值, 嵌套的值等等最終返回一個只有一層的數(shù)組. 既完成了Fcc的挑戰(zhàn).

前期思考

  1. 數(shù)組遍歷, 需要使用什么方法. 不止一個哦. 除了for循環(huán)
    • 檢查這個元素, 做判斷嘛.
  2. 數(shù)組判斷,
    • 是數(shù)組, 要繼續(xù)扁平化, 可以跳到思考 1 需要用到遞歸或者另一種多維度數(shù)組的處理方法.
    • 不是數(shù)組, 添加到結果數(shù)組中. *這里的結果數(shù)組需要在函數(shù)內定義還是全局定義呢? 見下面同學示例.
  3. 編寫代碼 , 想好了, 那就實踐吧, 即使出現(xiàn)了bug.
    • ?

代碼示范

一個同學的代碼示例

let newArr = [];     //定義全局結果數(shù)組
function steamroller(arr){
  for(let i=0; i<arr.length; i++){  // 循環(huán)遍歷`當前傳入數(shù)組`元素   注意是當前傳入數(shù)組襖
    if(Array.isArray(arr[i]))   // 如果是元素是數(shù)組而不是值,  那就條件為真
      steamroller(arr[i]);   // 這里用了遞歸的方法 循環(huán)調用
    else
      newArr.push(arr[i]);  //不是數(shù)組, 就push到結果數(shù)組里
  }
  return newArr;
}
steamroller([1, [2], [3, [[[4]]]]]);

返回結果是

[1,2,3,4]

但并沒有通過這道題. 為什么呢?

在題中調用兩次steamroller后,

steamroller([1, [2], [3, [[[4]]]]]);
steamroller([[["a"]], [["b"]]]);

結果卻不是我們想要的 ["a", "b"] 而是[1,2,3,4,"a", "b"] 為什么會把上一次調用的結果也push到了 結果數(shù)組中了?

代碼分析

原因就是, 在上面那個同學的代碼中, 他的結果數(shù)組: newArr是在全局定義的! 這也就導致, 他的結果數(shù)組保存著所有的調用steamroller函數(shù)的值. 所以這樣當然不會通過測試啦~

那機智如你會想到把結果數(shù)組定義到函數(shù)內, 但是當我們要扁平化的是多維數(shù)組時, 它就出現(xiàn)了只有第一個元素的尷尬現(xiàn)象.

What the hall???

so, 這個時候, 你可以了解 javascript的閉包函數(shù)了, 同學們點擊左側鏈接, 跳轉, 查看什么是閉包及其原理和應用.

一定去看襖.

以及, 這一題我也用了閉包, 在看完阮一峰老師的閉包講解后, 可以先嘗試著修改代碼. 也可以查看我的, 分析示例. 我有寫注釋. 據(jù)說代碼寫注釋是一個好習慣, 請問這個據(jù)說對不對 >.< ~~~

我的代碼示例

function steamroller(arr) {
  // I'm a steamroller, baby
  var result = [];    //定義結果數(shù)組
  function steam(ifArr) {   // 定義內部函數(shù).  
    if(Array.isArray(ifArr)){ 
      return ifArr.forEach(function(val){   //我這里用了forEach 循環(huán)數(shù)組, 想知道它的詳情, 下面有鏈接.
        return steam(val);          // 遞歸調用 steam函數(shù). 
      });
    }
    else
        result.push(ifArr);
  }
  
  steam(arr);   //調用函數(shù), 
  
  return result; // 返回結果數(shù)組
}

steamroller([1, [2], [3, [[[4]]]]]);
steamroller([[["a"]], [["b"]]]);

這樣, 就算我在代碼中調用了兩次steamroller函數(shù). 還是只有最后一次調用的結果.

這就是閉包的魅力

資源匯總

題目提供的判斷是否為數(shù)組的 Array.isArray()

代碼中涉及到的 遞歸 遞歸 PS: 這里還對遞歸的缺點進行了講解, 優(yōu)化.

代碼中涉及到的 閉包 閉包函數(shù) o_o

原題中文版鏈接 https://www.freecodecamp.cn/challenges/steamroller

原題英文版鏈接 https://www.freecodecamp.com/challenges/steamroller

最后

Pass
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,001評論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,786評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,986評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,204評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,964評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,354評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,410評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,554評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,106評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,918評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,093評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,648評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,342評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,755評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,009評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,839評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,107評論 2 375

推薦閱讀更多精彩內容