JS數(shù)組扁平化的5種方法

[1, [2, 3], [[3, 4, 2], 1], 5, [3]] => [1, 2, 3, 3, 4, 2, 1, 5, 3]
[1, ['2', 3], [2], '2', 4] => [1, "2", 3, 2, "2", 4]
  1. 遞歸
    循環(huán)數(shù)組镶摘,判斷 arr[i] 是否是數(shù)組跑芳,是數(shù)組的話再次調(diào)用此函數(shù)蝇完。

    const flatten = (arr) => {
        let res = []
        arr.forEach(item => {
            if (Array.isArray(item)) {
                res = res.concat(flatten(item))
            } else {
                res.push(item)
            }
        })
        return res
    }
    
  2. reduce() 方法
    reduce() 接收一個(gè)函數(shù)作為累加器,數(shù)組中的每個(gè)值(從左到右)開始縮減割卖,最終計(jì)算為一個(gè)值壁畸。
    語法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)贼急,接收四個(gè)參數(shù),前兩個(gè)必填捏萍,total 初始值太抓,計(jì)算結(jié)束后的返回值;currentValue 當(dāng)前元素令杈;currentIndex 當(dāng)前元素索引走敌;arr 元素所屬數(shù)組對象;initialValue逗噩,累加器初始值掉丽。

    // 求數(shù)組的各項(xiàng)值相加的和
    arr.reduce((total, item)=> total + item, 0)
    
    const flatten = (arr) => {
        return arr.reduce((pre, next) => {
            return pre.concat(Array.isArray(next) ? flatten(next) : next);
        }, [])
    }
    
  3. toString & split
    調(diào)用數(shù)組的toString方法,將數(shù)組變?yōu)樽址缓笤儆胹plit分割還原為數(shù)組异雁,但是此方法會改變數(shù)據(jù)類型捶障。慎用!8俚丁项炼!

    // split之后是字符串 再轉(zhuǎn)一下數(shù)字
    const flatten = (arr) => arr.toString().split(',').map(item => +item)
    
  4. ES6 flat()
    flat(n)將每一項(xiàng)的數(shù)組偏平化,n默認(rèn)是1,表示扁平化深度锭部,Infinity無限次暂论,flat() 會跳過空格,返回新數(shù)組不改變原數(shù)組拌禾。

    const flatten = (arr) => arr.flat(Infinity)
    
  5. ES6 擴(kuò)展運(yùn)算符 ...
    es6的擴(kuò)展運(yùn)算符能將二維數(shù)組變?yōu)橐痪S取胎,故仍需遍歷。

    const flatten = (arr) => {
        while (arr.some(item => Array.isArray(item))) {
            arr = [].concat(...arr) // 給原數(shù)組重新賦值
        }
        return arr
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹋砚,一起剝皮案震驚了整個(gè)濱河市扼菠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坝咐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件析恢,死亡現(xiàn)場離奇詭異墨坚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)映挂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門泽篮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柑船,你說我怎么就攤上這事帽撑。” “怎么了鞍时?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵亏拉,是天一觀的道長。 經(jīng)常有香客問我逆巍,道長及塘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任锐极,我火速辦了婚禮笙僚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灵再。我一直安慰自己肋层,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布翎迁。 她就那樣靜靜地躺著栋猖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸳兽。 梳的紋絲不亂的頭發(fā)上掂铐,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼全陨。 笑死爆班,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辱姨。 我是一名探鬼主播柿菩,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雨涛!你這毒婦竟也來了枢舶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤替久,失蹤者是張志新(化名)和其女友劉穎凉泄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚯根,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡后众,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颅拦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒂誉。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖距帅,靈堂內(nèi)的尸體忽然破棺而出右锨,到底是詐尸還是另有隱情,我是刑警寧澤碌秸,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布绍移,位于F島的核電站,受9級特大地震影響哮肚,放射性物質(zhì)發(fā)生泄漏登夫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一允趟、第九天 我趴在偏房一處隱蔽的房頂上張望恼策。 院中可真熱鬧,春花似錦潮剪、人聲如沸涣楷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狮斗。三九已至,卻和暖如春弧蝇,著一層夾襖步出監(jiān)牢的瞬間碳褒,已是汗流浹背折砸。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沙峻,地道東北人睦授。 一個(gè)月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像摔寨,于是被迫代替她去往敵國和親去枷。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 什么是數(shù)組扁平化是复? ['a','b','c'] //這是一個(gè)擁有3個(gè)元素的數(shù)組删顶,是一個(gè)一維數(shù)組(不存在數(shù)組嵌套)。...
    small_zeo閱讀 1,065評論 0 0
  • 扁平化數(shù)組(多維數(shù)組=>一維數(shù)組) 一淑廊、遞歸 (concat) 循環(huán)數(shù)組元素逗余,判斷是否是一個(gè)數(shù)組Array.isA...
    白菜_37e2閱讀 252評論 0 0
  • 一. 數(shù)組扁平化 數(shù)組的 扁平化就是將一個(gè)二維或者多維的數(shù)組進(jìn)行處理成一個(gè)一維的數(shù)組形同var arr = [1,...
    於我閱讀 1,354評論 0 1
  • //什么是數(shù)組扁平化 //將嵌套多層的數(shù)組,轉(zhuǎn)為一層數(shù)組叫做數(shù)組扁平化 vararr=[1,[2,[3]]] //...
    流星絕塵閱讀 201評論 0 0
  • http://www.conardli.top/docs/JavaScript/%E6%95%B0%E7%BB%8...
    Time_Notes閱讀 160評論 0 0