zoukankan      html  css  js  c++  java
  • flat 的用法

    今天在项目中,看到了flat的一个语法,是我之前没有用过的,所以有必要记录下来,作为新的知识点,巩固我自己的知识点;

    附赠转载连接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/flat;出自此链接

    这是我今天百度看到的一个比较全的解释;

    flat 的语法:

     var newArray = arr.flat(depth);//depth是参数;指定要提取嵌套数组的结构深度,默认值为 1;是一个可选的参数;flat的返回值是一个包含将数组与子数组中所有元素的新数组。 


    例子:
     1 var arr1 = [1, 2, [3, 4]];
     2 arr1.flat(); 
     3 // [1, 2, 3, 4]
     4 var arr2 = [1, 2, [3, 4, [5, 6]]];
     5 arr2.flat();
     6 // [1, 2, 3, 4, [5, 6]]
     7 
     8 var arr3 = [1, 2, [3, 4, [5, 6]]];
     9 arr3.flat(2);
    10 // [1, 2, 3, 4, 5, 6]
    11 
    12 //使用 Infinity 作为深度,展开任意深度的嵌套数组
    13 arr3.flat(Infinity); 
    14 // [1, 2, 3, 4, 5, 6]

    flat除了有扁平化嵌套数组之外还可以扁平化空项; 1 var arr4 = [1, 2, , 4, 5]; 2 arr4.flat(); 3 // [1, 2, 4, 5] 

    使用 reduce 与 concat的一个代替方案

     1 var arr1 = [1, 2, [3, 4]];
     2 arr1.flat();
     3 
     4 // 反嵌套一层数组
     5 arr1.reduce((acc, val) => acc.concat(val), []);// [1, 2, 3, 4]
     6 
     7 // 或使用 ...
     8 const flatSingle = arr => [].concat(...arr);
     9 
    10 // 使用 reduce、concat 和递归无限反嵌套多层嵌套的数组
    11 var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
    12 
    13 function flattenDeep(arr1) {
    14    return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
    15 }
    16 flattenDeep(arr1);
    17 // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
    18 
    19 
    20 // 不使用递归,使用 stack 无限反嵌套多层嵌套数组
    21 var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
    22 function flatten(input) {
    23   const stack = [...input];
    24   const res = [];
    25   while (stack.length) {
    26     // 使用 pop 从 stack 中取出并移除值
    27     const next = stack.pop();
    28     if (Array.isArray(next)) {
    29       // 使用 push 送回内层数组中的元素,不会改动原始输入 original input
    30       stack.push(...next);
    31     } else {
    32       res.push(next);
    33     }
    34   }
    35   // 使用 reverse 恢复原数组的顺序
    36   return res.reverse();
    37 }
    38 flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
  • 相关阅读:
    STL标准函数库学习小总结
    3 种生成高强度密码的方法
    树莓派使用 OLED 屏显示图片及文字
    一个骚命令防止你的文件被误删除!
    B站,首战告捷!
    10 个提高效率的 Linux 命令别名
    Vim的三款实用插件
    如何高效回退到特定层级目录?
    如何将目录下的脚本一次性全部执行
    数据结构|数组为什么这么快?
  • 原文地址:https://www.cnblogs.com/xiaomanong-19/p/11291522.html
Copyright © 2011-2022 走看看