(1)数组字符串化
let arr=[[222,333,444],[55,66,77]]
arr +='';
arr = arr.split(',');
console.log(arr);//["222","333","444","55","66","77"]
(2)递归
function getAtter (arr) {
let set=[];
let toArr = function (arr) {
arr.forEach( function (item) {
item instanceof Array ? toArr(item) : set.push(item);
});
}
toArr(arr);
return set;
}
3、Array.prototype.flat()
let arr1=[1,2,[3,4]];
arr1.flat();//[1,2,3,4]
let arr2=[1,2,[3,4,[5,6]]];
arr2.flat();//[1,2,3,4,[5,6]]
let 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]
4、使用stack无限反嵌套多层嵌套数组
let arr1=[1,2,3,[1,2,3,4,[2,3,4]]];
function flatten(input){
const stack=[...input];
const res=[];
while(stack.length){
//使用pop从stack中取出并移除值
const next=stack.pop();
if(Array.isArray(next)){
//使用push送回内层数组中的元素,不会改动原始输入originalinput
stack.push(...next);
}else{
res.push(next);
}
}
//使用reverse恢复原数组的顺序
return res.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]]];
function flattenDeep (arr1)
return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), )
console.log(flattenDeep(arr1))//[1,2,3,1,2,3,4, 2,3,4]