• js中关于数组处理的一些小技巧


    1 reduce方法同时实现map和filter

    假设现在有一个数组,然后遍历它的每一项(map的功能)然后筛选出其中的一部分(filter的功能)。如果使用map和filter的话,我们需要遍历这个数组两次。

    在下面的代码中,我们将数列中的值翻倍,然后挑选出那些大于50的数:

    const numbers = [10, 20, 30, 40];
    const numOver50 = numbers.reduce((finalArr, num) => {
      num = num * 2;
      if (num > 50) {
        finalArr.push(num);
      }
      return finalArr;      //finalArr为最后符合筛选条件的数组
    }, []);
    numOver50;            // [60, 80]

    2 统计数组中相同项的个数

    很多时候,我希望统计数组中重复出现项的个数然后用一个对象表示。那么我们可以使用reduce方法处理这个数组。

    下面的代码将统计每一种car的数目然后把总数用一个对象表示。

    var cars = ['BMW','Benz', 'Benz', 'Tesla', 'BMW', 'Toyota'];
    var carsObj = cars.reduce(function (obj, name) {
      obj[name] = obj[name] ? ++obj[name] : 1;
      return obj;
    }, {});
    carsObj; // => { BMW: 2, Benz: 2, Tesla: 1, Toyota: 1 }

    3 使用解构来交换参数数值

    有时候我们会将函数返回的多个值放在一个数组里。我们可以使用数组解构来获取其中每一个值。

    let param1 = 1;
    let param2 = 2;
    [param1, param2] = [param2, param1];
    console.log(param1) // 2
    console.log(param2) // 1
    //当然还有其他的方法进行交换之,例如

      b = [a, a = b][0];                   

      a = a + b; b = a - b; a = a - b  ;    

     var temp = a; a = b; b = temp ;

     

    4 接收函数返回的多个结果

     

    在下面的代码中,我们从/post中获取一个帖子,然后在/comments中获取相关评论。由于我们使用的是async/await,函数把返回值放在一个数组中。而我们使用数组解构后就可以把返回值直接赋给相应的变量。

    async function getFullPost(){
    
      return await Promise.all([
    
         fetch('/post'),
    
         fetch('/comments')
    
      ]);
    
    }
    
    const [post, comments] = getFullPost();

    5 将数组平铺到指定深度

     

    使用递归,为每个深度级别 depth 递减 1 。 使用 Array.reduce() 和 Array.concat() 来合并元素或数组。 基本情况下,depth 等于 1 停止递归。 省略第二个参数,depth 只能平铺到 1 (单层平铺) 的深度。

    const flatten = (arr, depth = 1) =>
    
      depth != 1
    
        ? arr.reduce((a, v) => a.concat(Array.isArray(v) ? flatten(v, depth - 1) : v), [])
    
        : arr.reduce((a, v) => a.concat(v), []);
    
    flatten([1, [2], 3, 4]);                             // [1, 2, 3, 4]
    
    flatten([1, [2, [3, [4, 5], 6], 7], 8], 2);           // [1, 2, 3, [4, 5], 6, 7, 8]

    6 数组的对象解构

     

    数组也可以对象解构,可以方便的获取数组的第n个值

    const csvFileLine = '1997,John Doe,US,john@doe.com,New York';
    
    const { 2: country, 4: state } = csvFileLine.split(',');
    
     
    
    country            // US
    
    state            // New Yourk

    大概就是这么多,有一部分我也不是很明白,希望能帮到大家。

    参考链接:https://mp.weixin.qq.com/s/wZHVHKRtjRzZHCb3BrHOhw

  • 相关阅读:
    鸡兔同笼问题
    猴子吃桃问题
    Fibonacci_sequence(斐波那契数列)
    Joseph_Circle(约瑟夫环)
    学生成绩管理--功能全--较难
    各种排序
    二叉排序树操作--基本
    面向对象程序设计(多继承)--简单
    面向对象程序设计3--简单
    使用 ASR 和 Azure Pack 为 IaaS 工作负荷提供托受管 DR
  • 原文地址:https://www.cnblogs.com/lxl0419/p/9956305.html
Copyright © 2020-2023  润新知