第17期 数组扁平化

111 阅读1分钟

数组扁平化是什么

是指将一个多维数组变为一维数组

[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));

参考

juejin.cn/post/684490…