亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript實現數組降維詳解

2019-11-19 18:08:05
字體:
來源:轉載
供稿:網友

二維數組降維

二維數組只有兩個維度,降維比較簡單,也不用考慮太復雜的算法邏輯,我們看一下二維數組降維的幾種方法;

遍歷降維

var arr = [  ['h', 'e', 'l', 'l', 'o'],  ['m', 'y'],  ['w', 'o', 'r', 'l', 'd'],  ['!']];var result = [];for (var r = 0; r < arr.length; r++) {  for (var c = 0; c < arr[r].length; c++) {    result.push(arr[r][c]);  }}console.log(result); //=>[ 'h', 'e', 'l', 'l', 'o', 'm', 'y', 'w', 'o', 'r', 'l', 'd', '!' ]

此方法思路簡單,利用雙重循環遍歷二維數組中的每個元素并放到新數組中。

使用concat

利用concat方法,可以將雙重循環簡化為單重循環:

var arr = [  ['h', 'e', 'l', 'l', 'o'],  ['m', 'y'],  ['w', 'o', 'r', 'l', 'd'],  ['!']];var result = [];for (var r = 0, result = []; r < arr.length; r++) {  result = result.concat(arr[r]);}console.log(result); //=>[ 'h', 'e', 'l', 'l', 'o', 'm', 'y', 'w', 'o', 'r', 'l', 'd', '!' ]

arr的每一個元素都是一個數組或參數,作為concat方法的參數,數組中的參數或每一個子元素又都會被獨立插入進新數組。

使用apply+concat

apply方法會調用一個函數,apply方法的第一個參數會作為被調用函數的this值,apply方法的第二個參數(一個數組,或類數組的對象)會作為被調用對象的arguments值,也就是說該數組的各個元素將會依次成為被調用函數的各個參數;

var arr = [  ['h', 'e', 'l', 'l', 'o'],  ['m', 'y'],  ['w', 'o', 'r', 'l', 'd'],  ['!']];var result = Array.prototype.concat.apply([], arr);console.log(result); //=>[ 'h', 'e', 'l', 'l', 'o', 'm', 'y', 'w', 'o', 'r', 'l', 'd', '!' ]

利用apply方法,只需要一行代碼就可以完成二維數組降維了。

多維數組降維

多維數組就沒二維數組那么簡單了,因為不確定數組的深度,所以也不能進行遍歷來降維,只能通過遞歸或者棧方法來實現。

遞歸

Array.prototype.deepFlatten = function() {  var result = []; //定義保存結果的數組  this.forEach(function(val, idx) { //遍歷數組    if (Array.isArray(val)) { //判斷是否為子數組      val.forEach(arguments.callee); //為子數組則遞歸執行    } else {      result.push(val); //不為子數組則將值存入結果數組中    }  });  return result; //返回result數組}var arr = [2, 3, [2, 2],  [3, 'f', ['w', 3]], { "name": 'Tom' }];console.log(arr.deepFlatten()); //=>[ 2, 3, 2, 2, 3, 'f', 'w', 3, { name: 'Tom' } ]

這是通過遞歸的方法實現了多維數組的降維,在這里面,我有使用了原型鏈將方法封裝進了Array原型中,可以直接在數組方法中調用。

棧方法

Array.prototype.deepFlatten = function() {  var result = []; //定義保存結果的數組  var stack = this; //將數組放入棧中  while (stack.length !== 0) { //如果棧不為空,則循環遍歷    var val = stack.pop(); //取出最后一個值    if (Array.isArray(val)) { //判斷是不是數組      stack = stack.concat(val); //如果是數組就將拼接入棧中    } else {      result.unshift(val); //如果不是數組就將其取出來放入結果數組中    }  }  return result;}var arr = [2, 3, [2, 2],  [3, 'f', ['w', 3]], { "name": 'Tom' }];console.log(arr.deepFlatten()); //=>[ 2, 3, 2, 2, 3, 'f', 'w', 3, { name: 'Tom' } ]

這是通過棧方法,建立了一個棧,將數組的內容存進去,然后逐個取出來,如果取出來的是個數組,就將這個數組打散拼接進棧中,在出棧一個,這樣循環。

多維數組降維的方法也可以降維二維數組,但是有點大材小用,還是用對的方法做對的事才是最好的!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91亚洲国产成人久久精品网站| 国产在线视频2019最新视频| 一区三区二区视频| 2019中文字幕在线| 成人国产亚洲精品a区天堂华泰| 91国产视频在线| 超碰日本道色综合久久综合| 久久影院模特热| 久久久久久久国产| 国产成人在线亚洲欧美| 欧美午夜精品久久久久久浪潮| 久久久人成影片一区二区三区| 国产精品va在线| 2020国产精品视频| 欧美亚洲激情在线| 亚洲九九九在线观看| 国产自摸综合网| 久久99国产精品自在自在app| 国产亚洲精品激情久久| 色偷偷88888欧美精品久久久| 欧美精品videos性欧美| 在线丨暗呦小u女国产精品| 国产精品美女午夜av| 九九九久久国产免费| 国产精品夜间视频香蕉| 国产精品自拍偷拍视频| 91精品综合久久久久久五月天| 日韩欧美综合在线视频| 精品国产老师黑色丝袜高跟鞋| 欧美日韩免费区域视频在线观看| 在线激情影院一区| 欧美黑人极品猛少妇色xxxxx| 麻豆成人在线看| 久久97精品久久久久久久不卡| 欧美壮男野外gaytube| 欧美大荫蒂xxx| 亚洲午夜未删减在线观看| 久久久成人av| 欧美电影在线播放| 国产偷亚洲偷欧美偷精品| 久久91亚洲精品中文字幕奶水| 亚洲国产精品99久久| 中文字幕成人精品久久不卡| 伊人伊人伊人久久| 日韩精品www| 久久久综合免费视频| 国产午夜精品全部视频在线播放| 欧美性色视频在线| 亚洲第一av在线| 久久久999精品免费| 亚洲国语精品自产拍在线观看| 亚洲精品在线视频| 久久97精品久久久久久久不卡| 成人激情av在线| 亚洲欧美国产精品va在线观看| 国产日韩在线看| 久久这里只有精品99| 亚洲欧洲午夜一线一品| 不卡av在线播放| 亚洲欧美日韩精品久久奇米色影视| 欧美成人精品h版在线观看| 亚洲成人精品在线| 久久久亚洲国产| 欧美极品少妇xxxxⅹ喷水| 一个色综合导航| 91国内免费在线视频| 亚洲另类欧美自拍| 欧美中文在线视频| 欧美亚洲一级片| 96精品久久久久中文字幕| 国产精品久久久久久久久粉嫩av| 亚洲人成在线免费观看| 91av免费观看91av精品在线| 亚洲香蕉成视频在线观看| 欧美老肥婆性猛交视频| 色综合久综合久久综合久鬼88| 亚洲精品v天堂中文字幕| 亚洲精品一区中文| 韩国日本不卡在线| 亚洲乱码一区av黑人高潮| 午夜精品久久久久久久99热| 亚洲欧美日韩精品久久奇米色影视| 亚洲精品小视频| 97精品视频在线播放| 国产在线不卡精品| 久久久国产精品亚洲一区| 欧美中文字幕在线观看| 91精品在线一区| 欧美激情a在线| 川上优av一区二区线观看| 国产成人久久久精品一区| 亚洲丁香久久久| 国产精品电影网站| 久久精品久久久久久国产 免费| 久久国产精品电影| 日韩精品视频在线观看免费| 国产一区二区三区视频| 国内揄拍国内精品少妇国语| 91久久久久久| 日韩免费在线观看视频| 日韩电影中文字幕av| 欧美激情精品久久久久久黑人| 欧美黄色片免费观看| 奇门遁甲1982国语版免费观看高清| 91久久精品久久国产性色也91| 欧美精品电影免费在线观看| 日韩欧美国产视频| 热门国产精品亚洲第一区在线| 裸体女人亚洲精品一区| 欧美电影在线观看高清| 亚洲成人黄色在线观看| 精品高清一区二区三区| 亚洲成色777777女色窝| 国产精品999999| 美女啪啪无遮挡免费久久网站| 亚洲区bt下载| 国产亚洲人成网站在线观看| 97久久精品在线| 国产97色在线| 国产精品一区二区女厕厕| 国产精品精品国产| 亚洲视频一区二区三区| 日韩精品在线免费观看视频| 午夜精品视频网站| 亚洲色图欧美制服丝袜另类第一页| 亚洲第一中文字幕| 亚洲xxx视频| 26uuu久久噜噜噜噜| 成人在线观看视频网站| www亚洲精品| 在线成人中文字幕| 久久手机免费视频| 日韩av男人的天堂| 国产精品免费在线免费| 免费不卡在线观看av| 91影院在线免费观看视频| 久久久亚洲天堂| 欧美二区在线播放| 国产拍精品一二三| 久久久亚洲国产天美传媒修理工| 日韩在线观看免费av| 国产精品成人av性教育| 成人黄色片网站| 日韩有码片在线观看| 亚洲国产精品字幕| 色噜噜久久综合伊人一本| 国产精品十八以下禁看| 91精品视频在线免费观看| 日韩精品一二三四区| 亚洲欧美成人在线| 欧美成人自拍视频| 68精品久久久久久欧美| 黑人欧美xxxx| 午夜精品久久久久久久白皮肤| 欧美有码在线观看| 欧美精品在线播放| 欧美激情欧美激情在线五月| 日韩国产高清视频在线| 欧美野外猛男的大粗鳮| 国产综合在线视频| 第一福利永久视频精品| 亚洲欧洲在线观看| 国自产精品手机在线观看视频| 日本精品视频网站|