浅谈数组扁平化方法
数组扁平化的几种方法,欢迎拍砖!
数组扁平化其实就是将一个嵌套多层的数组转换为只有一层的数组,好了废话不多说,直接上代码(以免被拍的太狠!!!)
方法一 :
var arr = [1, 2, 3, 4, 5, [6, 7, 8, 9, [10, 11, 12]], 13, 14, 15] / * ES10 flat() * 优点:简单快捷 * 缺点:因为是ES2019(ES10)方法,目前还未在所有浏览器兼容 */ // function flattenArrays(a){ // return a.flat(Infinity) // } // console.log(flattenArrays(arr)); //数组扁平化.html:24 (15) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法二 :
var arr = [1, 2, 3, 4, 5, [6, 7, 8, 9, [10, 11, 12]], 13, 14, 15]
/
* 递归:递归遍历每一项,如果为数组则继续遍历,否则就concat
/
// function flattenArrays(arr){
/ 空数组用来存放遍历后的新数组 /
// let res = [];
/ 利用数组的map()方法 /
// arr.map(item=>{
/ 判断item是不是数组 /
// if(Array.isArray(item)) {
/ 是数组就合并进res /
// res = res.concat(flattenArrays(item))
// }else{
/ 否则就添加进新数组 */
// res.push(item)
// }
// })
// return res
// }
// console.log(flattenArrays(arr));
//数组扁平化.html:43 (15) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法三 :
var arr = [1, 2, 3, 4, 5, [6, 7, 8, 9, [10, 11, 12]], 13, 14, 15]/ * toString & split * 调用数组的toString()方法,将数组转为字符串,然后用 split()分割还原为数组*/function flattenArrays(arr){ // split()方法分割后形成的数组的每一项的值为字符串,因此需要用一个map()方法遍历数组将其每一项转换为数值型 return arr.toString().split(',').map(function(item){ return Number(item) })}console.log(flattenArrays(arr));// 数组扁平化.html:63 (15) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法四 :
var arr = [1, 2, 3, 4, 5, [6, 7, 8, 9, [10, 11, 12]], 13, 14, 15];/ * join() $ split() * 调用数组的join()方法将数组转为字符串,再用split()方法分割还原为数组*/// function flattenArrays(arr){// return arr.join(',').split(',').map(function(item){// return parseInt(item)// })加粗样式// }// console.log(flattenArrays(arr));// 数组扁平化.html:76 (15) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法五 :
var arr = [1, 2, 3, 4, 5, [6, 7, 8, 9, [10, 11, 12]], 13, 14, 15]; / 方法五: reduce(): * reduce是数组的一种方法,它接收一个函数作为累加器,数组中的每个(从 到右)开始缩减,最终计算为一个值。 * reduce包含两个参数:回调函数,传给total的初始值 * 求数组的各项值相加的和: * arr.reduce((total, item)=> { // total为之前的计算结果,item为数组的各项值 * return total + item; * }, 0); */ // function flattenArrays(arr) { // return arr.reduce((result, item) => { // return result.concat(Array.isArray(item) ? flattenArrays(item) : item) // }, []); // } // console.log(flattenArrays(arr)); // 数组扁平化.html:89 (15) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
方法六 :
/ * 方法六: * 扩展运算符: * ES6的扩展运算符能将二维数组变为一维数组中 */ function flattenArrays(arr){while(arr.some((item)=> Array.isArray(item))){ arr = [].concat(...arr)}return arr } console.log(flattenArrays(arr));// 数组扁平化.html:108 (15) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]