優(yōu)雅地實(shí)現(xiàn)多維數(shù)組降維

原理參考 優(yōu)雅的數(shù)組降維——Javascript中apply方法的妙用。我的博客 if-true.com


現(xiàn)將幾種思路由淺入深地依次整理出來,并從二維上升到多維數(shù)組。

1. 嵌套循環(huán)

對(duì)于二維數(shù)組來說很容易想到,但對(duì)于多維以及不定維度的情況,嵌套的層數(shù)是不一定的,復(fù)雜度也會(huì)大大增加。以二維數(shù)組為例。

function reduceDimension(arr) {
    var result = [];
    for(var i = 0; i < arr.length; i++) {
        for(var j = 0; j < arr[i].length; j++) {
            result.push(arr[i][j]);
        }
    }
    return result;
}

2. 利用 concat 轉(zhuǎn)換

如果 concat 方法的參數(shù)是一個(gè)元素,該元素會(huì)被直接插入到新數(shù)組中;如果參數(shù)是一個(gè)數(shù)組,該數(shù)組的各個(gè)元素將被插入到新數(shù)組中。同樣以二維數(shù)組為例。

function reduceDimension(arr) {
    var result = [];
    for(var i = 0; i < arr.length; i++) {
        result = result.concat(arr[i]);
    }
    return result;
}

看似從兩重循環(huán)減為一個(gè)循環(huán),少了一半,仔細(xì)發(fā)現(xiàn)其實(shí)只是達(dá)到了降一維的作用。當(dāng)維度上升時(shí),并不好使。

3. 利用 apply 和 concat 轉(zhuǎn)換

apply方法的第一個(gè)參數(shù)會(huì)作為被調(diào)用函數(shù)的this值,apply方法的第二個(gè)參數(shù)(一個(gè)數(shù)組,或類數(shù)組的對(duì)象)會(huì)作為被調(diào)用對(duì)象的arguments值,也就是說該數(shù)組的各個(gè)元素將會(huì)依次成為被調(diào)用函數(shù)的各個(gè)參數(shù)。同樣以二維數(shù)組為例。

function reduceDimension(arr) {
    return Array.prototype.concat.apply([], arr);
}

這里甚至沒有用到循環(huán)。

4. 多維情況

這里考慮維度不一定的情況,需要通過 instanceof 來判斷數(shù)組的各個(gè)元素是否還是數(shù)組。于是有了下面的解決方案。

function reduceDimension(arr) {
    var tmp = arr;
    var result = arr;
    while(tmp instanceof Array) {
        result = Array.prototype.concat.apply([], result);
        tmp = tmp[0];
    }
    return result;
}

暫時(shí)想到這么多了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 如何將二維數(shù)組降到一維數(shù)組? 一 . 我們可以利用雙重循環(huán) dimensionalityReduction即為降維...
    Dl_毛良偉閱讀 1,051評(píng)論 3 3
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,615評(píng)論 3 44
  • 第1章 準(zhǔn)備工作第2章 Python語法基礎(chǔ),IPython和Jupyter第3章 Python的數(shù)據(jù)結(jié)構(gòu)、函數(shù)和...
    SeanCheney閱讀 153,763評(píng)論 17 386
  • 數(shù)組在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干變量按有序的形式組織起來。這些按序排列的同類數(shù)據(jù)元素的集合稱...
    朱森閱讀 4,271評(píng)論 2 13
  • 第1章 認(rèn)識(shí)JS JavaScript能做什么?1.增強(qiáng)頁面動(dòng)態(tài)效果(如:下拉菜單、圖片輪播、信息滾動(dòng)等)2.實(shí)現(xiàn)...
    mo默22閱讀 1,512評(píng)論 0 5

友情鏈接更多精彩內(nèi)容