数组扁平化是什么
是指将一个多维数组变为一维数组
[1, [2, 3, [4, 5]]] ------> [1, 2, 3, 4, 5]
flat()(基本都适用)
const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
var arr4 = [1, 2, , 4, 5];
arr4.flat(); // [1, 2, 4, 5]
arr.flat(Infinity);
reduce (基本都适用)
// String Number Object
const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
function change(arr){
return arr.reduce((result,item,index,self)=>{
return result.concat(Array.isArray(item) ? change(item) : item);
},[]);
}
console.log(change(arr));
toString && split (仅适用Number、String)
const arr = [1, [2, 3, [4, 5],["a"]]];
function change(arr){
return arr.toString().split(',').map(item=>{
return Number(item) ? Number(item) : item;
});
}
console.log(change(arr));
join && split (仅适用Number、String)
const arr = [1, [2, 3, [4, 5],["a"]]];
function change(arr){
return arr.join(',').split(',').map(item=>{
return Number(item) ? Number(item) : item;
});
}
console.log(change(arr));
map && 递归 (基本都适用)
const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
function change(arr){
let newArr = [];
arr.map(item=>{
if(Array.isArray(item)){
newArr = newArr.concat(change(item));
}else{
newArr.push(item);
}
});
return newArr;
}
console.log(change(arr));
扩展运算符 (基本都适用)
const arr = [1, [2, 3, [4, 5],["a",{a:1}]]];
function change(arr){
while(arr.some(item=>Array.isArray(item))) {
// 这里[].concat(...arr)就变成将[]和1,[2,3]合并成一个数组 即[1,2,3]
arr = [].concat(...arr);
}
return arr;
}
console.log(change(arr));