欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js嵌套的數組扁平化:將多維數組變成一維數組以及push()與concat()區(qū)別的講解

 更新時間:2019年01月19日 09:52:57   作者:muzidigbig  
今天小編就為大家分享一篇關于js嵌套的數組扁平化:將多維數組變成一維數組以及push()與concat()區(qū)別的講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

數組的扁平化:將多維數組變成一維數組

對于一個像這樣的嵌套數組:a=[1,[2,[3,4]],5,6]我們想要把它變成一個一維數組,有下面幾種方法:

方法一:遞歸一

function parseArr(arr,res){
  var i=0;
  for(i=0;i<arr.length;i++){
    if(arr[i] instanceof Array){
      parseArr(arr[i],res);
    }else{
      res.push(arr[i]);
    }
  }
}
var a=[1,[2,[3,4]],5,6];
var res=[];
parseArr(a,res);

遞歸二(推薦)

  var arr = ['mu','zi',['dig',['big','love']]]
  function flatten(arr){ 
    var res = []; 
    for(var i=0;i<arr.length;i++){
      if(Array.isArray(arr[i])){
        res = res.concat(flatten(arr[i]));
      }else{
        res.push(arr[i]);
      } 
    } 
    return res; 
  }
  console.log(flatten(arr))//["mu", "zi", "dig", "big", "love"]

對上面的方法進行解析:

1.語法: Array.isArray(object);參數:object必需。要測試的對象。

返回值

如果 object 是數組,則為 true;否則為 false。 如果 object 參數不是對象,則返回 false。

2.push()與concat()的區(qū)別

  • 1,push()是在原數組的基礎上修改的,執(zhí)行push()方法后原數組的值也會變,在原數組后面添加值;若操作concat()的是一個數組先把原數組的每個值復制到一個新/另的數組,然后在新/另數組上進行操作,所以不會改變原數組的值。
  • 2,如果參數不是數組,不管參數個數有多少個,push()和concat()都會直接把參數添加到數組后;如果參數是一個數組,push()就會直接把數組添加到原數組后,而concat()會把數組里的值取出來添加到原數組后。

方法二: 使用toString先變成一個字符串再使用split變成一個字符串數組(數組中的每個元素是一個字符串),最后使用map方法將數組中的每個元素返回為非字符串。

//arr數組中的元素不能為字符串只能為數組
var newArr=arr.toString().split(',').map(function(ele){
  return +ele;
});
console.log(newArr)
alert(typeof arr[0]); //number

方式三:使用toString()和split(',')方法

  toString()

     如果數組的元素都是數字,那么我們可以考慮使用 toString 方法,因為:
     toString會將數組中的數以逗號形式結合起來。

toString()之后再split(',')轉成數組,并將其轉換回數字數組:

  var arr = [1, [2, [3, 4],[5,[6],[7,8]]]];
  var arrStr = arr.toString();
  console.log(arrStr);//1,2,3,4,5,6,7,8
  var strArr = arrStr.split(',');
  console.log(strArr)//["1", "2", "3", "4", "5", "6", "7", "8"]

方式二和方式三  的場景只適用于數組內全部是數字的情況,因為中間是全部轉換為字符串了。

方法四: 使用reduce和concat方法

Array.prototype.flatten=function(){
  return this.reduce(function(prev, cur) {
    var moreArr = [].concat(cur).some(Array.isArray); //判斷cur是不是一個數組
    return prev.concat(moreArr ? cur.flatten() : cur);
  },[]);
};
var arr=a.flatten();
  //合并二維數組
  var twoArr = [['mu','zi'],['dig','big'],['lucky','jiji']];
  var oneArr = twoArr.reduce(function(total,currentValue){
    // console.log(total)
    return total.concat(currentValue);
  })
  console.log(oneArr);//["mu", "zi", "dig", "big", "lucky", "jiji"]

reduce() 方法接收一個函數作為累加器,數組中的每個值(從左到右)開始縮減,最終計算為一個值。

reduce() 可以作為一個高階函數,用于函數的 compose。

注意: reduce() 對于空數組是不會執(zhí)行回調函數的。

  var arr = [1,2,3,4,5,6,7,8,9,10]
  var str = arr.reduce(function(prev,cur,index,arr){
    return prev + cur ;
  })
  console.log(str)//55

方式五:es6擴展運算符

function flatten(arr){
  while(arr.some(item=>Array.isArray(item)){
    arr = [].concat(...arr);
  }
  return arr;
}

由于擴展運算符一次只能展開一層數組:

var arr = [1, [2, [3, 4]]];
console.log([].concat(...arr)); // [1, 2, [3, 4]]

因此考慮只要數組中還有數組,就使用擴展運算符展開一次。

若有不足請多多指教!希望給您帶來幫助!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • 前端GET/POST請求下載文件多種方式代碼示例

    前端GET/POST請求下載文件多種方式代碼示例

    文件都是通過接口獲取的,前端通過調用接口將接口返回的文件下載,下面這篇文章主要給大家介紹了關于前端GET/POST請求下載文件的多種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • undefined與null的區(qū)別示例詳解

    undefined與null的區(qū)別示例詳解

    這篇文章主要為大家介紹了undefined與null的區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 手把手教你實現一個JavaScript時間軸組件

    手把手教你實現一個JavaScript時間軸組件

    本文主要是給大家?guī)硪粋€時間軸的組件開發(fā)教程,其主要功能就是可以拖動時間軸來定位當前時間,可以通過鼠標滾輪來修改當前時間分辨率,需要的可以參考一下
    2022-10-10
  • JS變量提升及函數提升實例解析

    JS變量提升及函數提升實例解析

    這篇文章主要介紹了JS變量提升及函數提升實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • js的with語句使用方法

    js的with語句使用方法

    js的with語句使用方法...
    2007-09-09
  • JavaScript實現的經典文件樹菜單效果

    JavaScript實現的經典文件樹菜單效果

    這篇文章主要介紹了JavaScript實現的經典文件樹菜單效果,通過JavaScript結合json數組實現文件樹菜單的效果,非常簡單實用,需要的朋友可以參考下
    2015-09-09
  • js實現收縮菜單效果實例代碼

    js實現收縮菜單效果實例代碼

    這篇文章介紹了js實現收縮菜單效果實例代碼,有需要的朋友可以參考一下
    2013-10-10
  • 預防網頁掛馬的方法總結

    預防網頁掛馬的方法總結

    這篇文章主要介紹了預防網頁掛馬的方法總結的相關資料,這里詳細整理了具體方法,和如何實現,需要的朋友可以參考下
    2016-11-11
  • 原生js實現密碼輸入框值的顯示隱藏

    原生js實現密碼輸入框值的顯示隱藏

    這篇文章主要為大家詳細介紹了原生js實現密碼輸入框值的顯示隱藏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 老生常談javascript的類型轉換

    老生常談javascript的類型轉換

    下面小編就為大家?guī)硪黄仙U刯avascript的類型轉換。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10

最新評論