Js如何在原生的数组中实现扁平化函数
1、概念
数组扁平化:就是将一个多维数组变成一维数组
2、实现方式
方法1:reduce和concat方法
思想:遍历数组每一项,如果值是数组,进行递归调用
reduce方法:从数组的第一项开始,逐个遍历到最后,最终迭代数组的所有项
concat方法:将接收到的参数添加到数组的末尾
var arr=[1,[2,[3,[4,[5]]]]]; function flatten(arr) { return arr.reduce((result,item)=>{ return result.concat(Array.isArray(item)?flatten(item):item); },[]) } console.log(flatten(arr));
方法2:ES6扩展运算符和some方法
思想:对数组进行一次遍历,如果arr中含有数组则进行一次扩展运算符
some方法:对数组中的每一项运行给定的函数,如果该函数对任一项返回true,该方法返回值为true
扩展运算符:将一个数组转为用逗号分隔的参数序列(可以将二维数组转换为一维数组)
function flatten(arr) { while(arr.some(item=>Array.isArray(item))){ arr=[].concat(...arr); } return arr; } console.log(flatten(arr));
方法3:递归
思想:数组中的每一项如果是数组,进行递归调用,否则直接加入到新的数组中
function flatten(arr) { var result=[]; for (var i=0;i<arr.length;i++) { if (Array.isArray(arr[i])){ result=result.concat(flatten(arr[i])); }else{ result.push(arr[i]); } } return result; }
方法4:toString(或者join) & split
思想:用toString或者join方法将数组转变为字符串,然后,再用split方法分割还原为数组
function flatten(arr) { return arr.toString().split(',').map(function(item) { return Number(item); }) }