js最全的数组的降维5种办法(小结)
业务开发中,二维数组、多维数组转为一维数组这种需求是少不了的,有些多维数组里面可能嵌套会更深,数组降维就是来解决此问题的
1、数组字符串化
letarr=[[222,333,444],[55,66,77],{a:1}]
arr+='';
arr=arr.split(',');
console.log(arr);//["222","333","444","55","66","77","[objectObject]"]
所有的元素会转换为字符串,且元素为对象类型会被转换为 "[objectObject]" ,对于同一种类型数字或字符串还是可以的。
2、递归
functionreduceDimension(arr){
letret=[];
lettoArr=function(arr){
arr.forEach(function(item){
iteminstanceofArray?toArr(item):ret.push(item);
});
}
toArr(arr);
returnret;
}
3、Array.prototype.flat()
vararr1=[1,2,[3,4]]; arr1.flat(); //[1,2,3,4] vararr2=[1,2,[3,4,[5,6]]]; arr2.flat(); //[1,2,3,4,[5,6]] vararr3=[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]
4、
//不使用递归,使用stack无限反嵌套多层嵌套数组
vararr1=[1,2,3,[1,2,3,4,[2,3,4]]];
functionflatten(input){
conststack=[...input];
constres=[];
while(stack.length){
//使用pop从stack中取出并移除值
constnext=stack.pop();
if(Array.isArray(next)){
//使用push送回内层数组中的元素,不会改动原始输入originalinput
stack.push(...next);
}else{
res.push(next);
}
}
//使用reverse恢复原数组的顺序
returnres.reverse();
}
flatten(arr1);//[1,2,3,1,2,3,4,2,3,4]
5、
//使用reduce、concat和递归无限反嵌套多层嵌套的数组
vararr1=[1,2,3,[1,2,3,4,[2,3,4]]];
functionflattenDeep(arr1){
returnarr1.reduce((acc,val)=>Array.isArray(val)?acc.concat(flattenDeep(val)):acc.concat(val),[]);
}
flattenDeep(arr1);
//[1,2,3,1,2,3,4,2,3,4]
到此这篇关于js最全的数组的降维5种办法(小结)的文章就介绍到这了,更多相关js数组降维内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!