數(shù)組的扁平化:將多維數(shù)組變成一維數(shù)組
對于一個(gè)像這樣的嵌套數(shù)組:a=[1,[2,[3,4]],5,6]我們想要把它變成一個(gè)一維數(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"]對上面的方法進(jìn)行解析:
1.語法: Array.isArray(object);參數(shù):object必需。要測試的對象。
返回值
如果 object 是數(shù)組,則為 true;否則為 false。 如果 object 參數(shù)不是對象,則返回 false。
2.push()與concat()的區(qū)別
1,push()是在原數(shù)組的基礎(chǔ)上修改的,執(zhí)行push()方法后原數(shù)組的值也會(huì)變,在原數(shù)組后面添加值;若操作concat()的是一個(gè)數(shù)組先把原數(shù)組的每個(gè)值復(fù)制到一個(gè)新/另的數(shù)組,然后在新/另數(shù)組上進(jìn)行操作,所以不會(huì)改變原數(shù)組的值。 2,如果參數(shù)不是數(shù)組,不管參數(shù)個(gè)數(shù)有多少個(gè),push()和concat()都會(huì)直接把參數(shù)添加到數(shù)組后;如果參數(shù)是一個(gè)數(shù)組,push()就會(huì)直接把數(shù)組添加到原數(shù)組后,而concat()會(huì)把數(shù)組里的值取出來添加到原數(shù)組后。方法二: 使用toString先變成一個(gè)字符串再使用split變成一個(gè)字符串?dāng)?shù)組(數(shù)組中的每個(gè)元素是一個(gè)字符串),最后使用map方法將數(shù)組中的每個(gè)元素返回為非字符串。
//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 方法,因?yàn)椋?br /> toString會(huì)將數(shù)組中的數(shù)以逗號(hào)形式結(jié)合起來。
toString()之后再split(',')轉(zhuǎn)成數(shù)組,并將其轉(zhuǎn)換回?cái)?shù)字?jǐn)?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ù)字的情況,因?yàn)橹虚g是全部轉(zhuǎn)換為字符串了。
方法四: 使用reduce和concat方法
新聞熱點(diǎn)
疑難解答
圖片精選