AI智能
改变未来

JS数组降维的几种方法详解


二维数组降维

使用数组实例方法concat和ES6扩展运算符降维

let arr=[1,2,[3,4],5];let arr1=[].concat(...arr);//先使用扩展运算符打散最外边的数组,concat自带打散粘合数组的功能console.log(arr1);// [1, 2, 3, 4, 5]//ES6之前用apply打散数据的兼容性写法var arr2=[1,2,[3,4],5];var arr3=[].concat.apply([],arr2);console.log(arr3);// [1, 2, 3, 4, 5]

多维数组降维

递归降维

//几种利用数组函数递归降维的写法//some&concat//利用some检查数组中是否含有数组有就在调用自己进行降维function fun(arr){arr=[].concat(...arr);//再检查降维后的数组中是否还包含子数组let hasArray=arr.some(function(elem){return Array.isArray(elem);})if(hasArray){ //如果包含子数组arr=fun(arr);//就只能再降维一次,直到检查不再包含子数组为止}return arr;};//forEach&instanceof//对数组每个元素进行判断看其是不是数组是在继续调用自己,不是把他放进提前准备的空数组中function fun2(arr){let ret = [];let toArr = function(arr){arr.forEach(function(item){item instanceof Array ? toArr(item) : ret.push(item);});}toArr(arr);return ret;}//reduce&concat//最后准备一个空数组,看传入数组中的每一项是不是数组是就重新调用自己不是就用concat汇总到空数组中function fun3(sarr){return sarr.reduce((pre,val)=>{return Array.isArray(val) ? pre.concat(fun3(val)): pre.concat(val)},[])}

Array.prototype.flat()

ES10 新增Array.prototype.flat(),用于将嵌套的数组打散,变成一维的数组。该方法返回一个新数组,对原数据没有影响。

var arr1 = [1, 2, [3, 4]];arr1.flat();// [1, 2, 3, 4]var arr2 = [1, 2, [3, 4, [5, 6]]];arr2.flat();// [1, 2, 3, 4, [5, 6]]var arr3 = [1, 2, [3, 4, [5, 6]]];arr3.flat(2);// [1, 2, 3, 4, 5, 6]//使用 Infinity 作为深度,展开任意深度的嵌套数组arr3.flat(Infinity);// [1, 2, 3, 4, 5, 6]

到此这篇关于JS数组降维的几种方法的文章就介绍到这了,更多相关JS数组降维内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

  • js最全的数组的降维5种办法(小结)
  • JS数组降维的实现Array.prototype.concat.apply([], arr)
  • JavaScript实现数组降维详解
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » JS数组降维的几种方法详解