数组扁平化

  1. 什么是数组扁平化

    数组扁平化就是将一个多层嵌套的数组 (Arrary) 转化为只有一层。

    // 多层嵌套
    [1, 2, [3, 4]] // 一层
    [1, 2, 3, 4]
  2. 递归实现

    思路是先循环数组,遇到嵌套就递归。

    function flatten(arr) {
    let res = [];
    for (let i=0; i<arr.length; i++) {
    if (Array.isArray(arr[i])) {
    res = res.concat(flatten(arr[i]));
    } else {
    res.push(arr[i]);
    }
    }
    return res;
    } flatten([1, 2, [3, 4]]); // [1, 2, 3, 4]
  3. reduce实现

    reduce方法接受一个函数作为参数,这个函数作为一个累加器,从左到右遍历 (升序) 整个类型数组,最后将结果汇总为单个值返回。

    reduce方法还接受一个可选的参数initialValue,作为第一次调用 callback函数时的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。 在没有初始值的空数组上调用 reduce 将报错。

    reducer 函数接收4个参数:

    1. Accumulator (acc) (累计器)
    2. Current Value (cur) (当前值)
    3. Current Index (idx) (当前索引) 可选
    4. Source Array (src) (源数组) 可选

    reducer 函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后成为最终的单个结果值。

    function flatten(arr) {
    return arr.reduce((acc, cur)=> {
    // 遇到嵌套就递归
    return acc.concat(Array.isArray(cur) ? flatten(cur) : cur);
    }, []);
    } flatten([1, 2, [3, 4]]); // [1, 2, 3, 4]
  4. 使用扩展运算符...

    some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试,返回boolean值。

    注意:对于放在空数组上的任何条件,此方法返回false

    function flatten(arr) {
    // 循环展开嵌套的数组,直到没有嵌套
    while(arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
    }
    return arr;
    } flatten([1, 2, [3, [5, 6], 4]]); // [1, 2, 3, 5, 6, 4]
  5. 去重

    数组去重要考虑的太多了,这里只简单的用Set返回一个不重复的值

    function flatten(arr) {
    // 循环展开嵌套的数组,直到没有嵌套
    while(arr.some(item => Array.isArray(item))) {
    arr = [].concat(...arr);
    }
    return Array.from(new Set(arr));;
    } flatten([1, 1, 2, [3, [3, 5, 6], 4]]); // [1, 2, 3, 5, 6, 4]
  6. 排序

    扁平化的同时实现排序也是很常见的,前面提到的去重就可以在排序的同时进行,但排序要看具体需求来进行封装方法,这里就不进行探讨了。

JS: 数组扁平化的更多相关文章

  1. JavaScript数组常用方法解析和深层次js数组扁平化

    前言 数组作为在开发中常用的集合,除了for循环遍历以外,还有很多内置对象的方法,包括map,以及数组筛选元素filter等. 注:文章结尾处附深层次数组扁平化方法操作. 作为引用数据类型的一种,在处 ...

  2. js数组扁平化

    看到一个有趣的题目: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 一个多维 ...

  3. JS数组扁平化(flat)

    需求:多维数组=>一维数组 let ary = [1, [2, [3, [4, 5]]], 6]; let str = JSON.stringify(ary); 第0种处理:直接的调用 arr_ ...

  4. js中数组扁平化处理

  5. js技巧-使用reduce实现更简洁的数组对象去重和数组扁平化

    Array.prototype.reduce()方法介绍: 感性认识reduce累加器: const arr = [1, 2, 3, 4]; const reducer = (accumulator, ...

  6. JS数组专题1️⃣ ➖ 数组扁平化

    一.什么是数组扁平化 扁平化,顾名思义就是减少复杂性装饰,使其事物本身更简洁.简单,突出主题. 数组扁平化,对着上面意思套也知道了,就是将一个复杂的嵌套多层的数组,一层一层的转化为层级较少或者只有一层 ...

  7. js多维数组扁平化

    数组扁平化,就是将多维数组碾平为一维数组,方便使用. 一:例如,一个二维数组 var arr = ['a', ['b', 2], ['c', 3, 'x']],将其扁平化: 1.  通过 apply ...

  8. js实现数组扁平化

    数组扁平化的方式 什么是数组扁平化? 数组扁平化:指将一个多维数组转化为一个一维数组. 例:将下面数组扁平化处理. const arr = [1, [2, 3, [4, 5]]] // ---> ...

  9. javascrip的数组扁平化

    扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组. 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下: var ar ...

随机推荐

  1. 换行符在HTML中直接替换为<br>

         #set($text=$!obj.getMeasure().replaceAll("\r\n","<br>"))     <td a ...

  2. 2018.10.20 bzoj1079: [SCOI2008]着色方案(多维dp)

    传送门 dp妙题. f[a][b][c][d][e][last]f[a][b][c][d][e][last]f[a][b][c][d][e][last]表示还剩下aaa个可以用一次的,还剩下bbb个可 ...

  3. Django的路由层(2)

    https://www.cnblogs.com/yuanchenqi/articles/8931472.html django2.0版的path Django默认支持以下5个转化器: str,匹配除了 ...

  4. DVWA

    DVWA默认的用户有5个,用户名密码如下(一个足以): admin/password gordonb/abc123 1337/charley pablo/letmein smithy/password

  5. UCMap移动GIS & 时空地图GIS

    UCMapViewer是基于UCMap(OpenGL版)的通用地图开发框架,涵盖了各类GIS数据的展示.查询.编辑.分析等各项功能 (http://www.creable.cn/kuibu/xiaza ...

  6. Android真机调试试验

    之前一直使用模拟器,很不好用,今天使用真机调试试验. 准备材料:电脑,Android手机. 首先,就遇到了一个问题,我的手机是华为的,之前不知道怎么回事,打开调试总是自动关闭,而且切换总是切换不了,老 ...

  7. oracl中的大数据类型clob

    建表 create table test_name( test_id   number(6) not null, img_data clob ); 在java中该表所对应的po为: class Tes ...

  8. 配置使用sourcemap调试vue源码爬坑

    环境: Google Chrome  V72.0.3626.109 vue-dev V 2.6.10 爬坑的乐趣就不说了(我恨啊),以下说一下出坑要点 1. 在vue-dev的package.json ...

  9. 两种方式创建支持SSH服务的docker镜像

    方法一:基于commit命令创建 1.首先,从docker的源中查看我们需要的镜像,本案例中使用Ubuntu作为基础镜像. # federico @ linux in ~ [16:57:38] $ s ...

  10. StructuredStream StateStore机制

    ref: https://jaceklaskowski.gitbooks.io/spark-structured-streaming/ StruncturedStream的statefule实现基于S ...