数组扁平化(数组展开)

矫情吗;* 2023-10-11 13:07 132阅读 0赞

第一种:flat()

  1. let arr1=[1,2,['a','b','c'],3];
  2. console.log(arr1.flat());

在这里插入图片描述
flat()还未加入到ES6规范中。
如果有多层可以在flat()中加参数Infinity

  1. let arr1=[1,2,['a','b','c',['e','f']],3];
  2. console.log(arr1.flat(Infinity));

在这里插入图片描述
问题:

  1. let arr1=[1,2,{
  2. x:1,y:2},3];
  3. console.log(arr1.flat(Infinity));

在这里插入图片描述
第二种:map

  1. function flat(items){
  2. let res=[];
  3. items.map(item=>{
  4. if(Array.isArray(item)){
  5. res=res.concat(flat(item));
  6. }else{
  7. res.push(item);
  8. }
  9. })
  10. return res;
  11. }

第三种 : forEach

  1. function flat(items){
  2. let res=[];
  3. items.forEach(item=>{
  4. if(Array.isArray(item)){
  5. res=res.concat(flat(item));
  6. }else{
  7. res.push(item);
  8. }
  9. })
  10. return res;
  11. }

也可以使用for循环,原理和forEach一样,遍历数组中的每一项。
第四种:reduce

  1. function flat(items){
  2. return items.reduce((prev,current)=>{
  3. prev.concat(Array.isArray(current)?flat(current):item);
  4. },[]);
  5. }

第五种:扩展运算符

  1. function flat(items) {
  2. while(items.some(item=>Array.isArray(item))) {
  3. items= [].concat(...items);
  4. }
  5. return items;
  6. }

也可以采用toString+split或join+split,但是 toString 转化为字符串的时候,不会区分字符串和数字类型,如果需要区分数据类型最好不要使用。

  1. console.log(arr1.toString().split(","))
  2. console.log(arr1.join(",").split(","))

发表评论

表情:
评论列表 (有 0 条评论,132人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数组扁平

    概念:用于将嵌套多层的数组“拉平”,变成一维的数组 方法一:通过concat将二维数组转化为一维数组 原理:通过将扩展运算符,将数组内部展开,并通过concat连接两个

    相关 JS数组扁平

    一道笔试题,将一个嵌套数组扁平化处理。   ▍题目 > 将\[1,2,\[3,\[4,5\]\]\]转化成\[1,2,3,4,5\]。   ▍方法一:递归

    相关 js 数组扁平

    第一种 > 依次把每一项添加进新数组 > 如果为非数组,直接添加 > 如果为数组,则添加递归操作的结果 function flatten(ar