您好,登錄后才能下訂單哦!
小編給大家分享一下js中push()與concat()有哪些區(qū)別,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
數(shù)組的扁平化:將多維數(shù)組變成一維數(shù)組
對于一個像這樣的嵌套數(shù)組:a=[1,[2,[3,4]],5,6]我們想要把它變成一個一維數(shù)組,有下面幾種方法:
方法一:遞歸一
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);
參數(shù):object必需。要測試的對象。
返回值
如果 object 是數(shù)組,則為 true;否則為 false。 如果 object 參數(shù)不是對象,則返回 false。
2.push()與concat()的區(qū)別
1,push()是在原數(shù)組的基礎(chǔ)上修改的,執(zhí)行push()方法后原數(shù)組的值也會變,在原數(shù)組后面添加值;若操作concat()的是一個數(shù)組先把原數(shù)組的每個值復(fù)制到一個新/另的數(shù)組,然后在新/另數(shù)組上進行操作,所以不會改變原數(shù)組的值。
2,如果參數(shù)不是數(shù)組,不管參數(shù)個數(shù)有多少個,push()和concat()都會直接把參數(shù)添加到數(shù)組后;如果參數(shù)是一個數(shù)組,push()就會直接把數(shù)組添加到原數(shù)組后,而concat()會把數(shù)組里的值取出來添加到原數(shù)組后。
方法二: 使用toString先變成一個字符串再使用split變成一個字符串?dāng)?shù)組(數(shù)組中的每個元素是一個字符串),最后使用map方法將數(shù)組中的每個元素返回為非字符串。
//arr數(shù)組中的元素不能為字符串只能為數(shù)組 var newArr=arr.toString().split(',').map(function(ele){ return +ele; }); console.log(newArr) alert(typeof arr[0]); //number
方式三:使用toString()和split(',')方法
toString()
如果數(shù)組的元素都是數(shù)字,那么我們可以考慮使用 toString 方法,因為:
toString會將數(shù)組中的數(shù)以逗號形式結(jié)合起來。
toString()之后再split(',')轉(zhuǎn)成數(shù)組,并將其轉(zhuǎn)換回數(shù)字數(shù)組:
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"]
方式二和方式三 的場景只適用于數(shù)組內(nèi)全部是數(shù)字的情況,因為中間是全部轉(zhuǎn)換為字符串了。
方法四: 使用reduce和concat方法
Array.prototype.flatten=function(){ return this.reduce(function(prev, cur) { var moreArr = [].concat(cur).some(Array.isArray); //判斷cur是不是一個數(shù)組 return prev.concat(moreArr ? cur.flatten() : cur); },[]); }; var arr=a.flatten();
//合并二維數(shù)組 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() 方法接收一個函數(shù)作為累加器,數(shù)組中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 可以作為一個高階函數(shù),用于函數(shù)的 compose。
注意: reduce() 對于空數(shù)組是不會執(zhí)行回調(diào)函數(shù)的。
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; }
由于擴展運算符一次只能展開一層數(shù)組:
var arr = [1, [2, [3, 4]]]; console.log([].concat(...arr)); // [1, 2, [3, 4]]
因此考慮只要數(shù)組中還有數(shù)組,就使用擴展運算符展開一次。
若有不足請多多指教!希望給您帶來幫助!
以上是“js中push()與concat()有哪些區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。