美文网首页
关于ES6的reduce方法来快速找到基本的数学运算

关于ES6的reduce方法来快速找到基本的数学运算

作者: 泪滴在琴上 | 来源:发表于2022-04-24 10:45 被阅读0次

语法

arr.reduce(callback,[initialValue])

reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce 的数组。
callback (执行数组中每个值的函数,包含四个参数)

1、previousValue (上一次调用回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调用 reduce 的数组)

initialValue (作为第一次调用 callback 的第一个参数。)

实例解析 initialValue 参数

没有初始值的情况

var arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
})
console.log(arr, sum);

打印结果:
1 2 1
3 3 2
6 4 3
[1, 2, 3, 4] 10
需要注意的是如果arr初始值为[],没有初始值的情况下,执行reduce会报错

有初始值的情况

var  arr = [1, 2, 3, 4];
var sum = arr.reduce(function(prev, cur, index, arr) {
    console.log(prev, cur, index);
    return prev + cur;
},0) //注意这里设置了初始值
console.log(arr, sum);

打印结果:
0 1 0
1 2 1
3 3 2
6 4 3
[1, 2, 3, 4] 10
这个例子index是从0开始的,第一次的prev的值是我们设置的初始值0,数组长度是4,reduce函数循环4次。
需要注意的是如果arr初始值为[],有初始值的情况下执行reduce会报错

基本的数学运算

const array  = [5,4,7,8,9,2];

array.reduce((a,b) => a+b);
// 输出: 35

最大值

array.reduce((a,b) => a>b?a:b);
// 输出: 9

最小值

array.reduce((a,b) => a<b?a:b);
// 输出: 2

高级用法

(1)计算数组中每个元素出现的次数

let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

let nameNum = names.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1 
  }
  return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}

(2)数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

(3)将二维数组转化为一维

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
    return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]

(3)将多维数组转化为一维

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
   return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

(4)对象里的属性求和

var result = [
    {
        subject: 'math',
        score: 10
    },
    {
        subject: 'chinese',
        score: 20
    },
    {
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    return cur.score + prev;
}, 0);
console.log(sum) //60

(5)获取数组内所有的value值

const arr = [
      {
        value: 'zhinan',
        label: '指南',
        children: [
          {
            value: 'shejiyuanze',
            label: '设计原则',
            children: [
              {
                value: 'yizhi',
                label: '一致'
              },
              {
                value: 'fankui',
                label: '反馈'
              }
            ]
          },
          {
            value: 'daohang',
            label: '导航',
            children: [
              {
                value: 'cexiangdaohang',
                label: '侧向导航'
              },
              {
                value: 'dingbudaohang',
                label: '顶部导航'
              }
            ]
          }
        ]
      }
    ];

    const getValueList = (arr) => {
      return arr.reduce((pre, cur) => {
        if (cur.children) {
          pre.push(cur.value)
          pre.push(...getValueList(cur.children))
        } else {
          pre.push(cur.value)
        }
        return pre
      }, [])
    };
    console.log(getValueList(arr)); // ['zhinan', 'shejiyuanze', 'yizhi', 'fankui', 'daohang', 'cexiangdaohang', 'dingbudaohan

作者:刘其瑞
链接:https://www.jianshu.com/p/38f817eda818
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • 关于ES6的reduce方法来快速找到基本的数学运算

    语法 reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始...

  • js 取数组中最大值

    es6拓展运算符 es5 apply(与方法1原理相同) for循环 数组sort() 数组reduce

  • 新增的数组方法

    ES6新增的数组方法 关于数组中forEach() 、map()、filter()、reduce()、some()...

  • 摘录

    1、算术和数学的区别 算术是数学的分支,或者说是数学的最初形式,它是关于数的一些运算的基本属性的研究.常用的运算有...

  • 【从小白开始学python系列九】数值运算(附水仙花案例)

    关于数值运算呢,就要说到运算符的使用。 1、算数运算符 因为是整数,所以也可以进行数学中的基本运算。 算数运算符是...

  • 数组扁平化

    1. es6 flat 2.es6 ...拓展运算符 3.递归实现数组扁平化 4.reduce实现 5.whil...

  • 南浔名思教育教你如何学好数学

    学好数学是能力的培养: 一、数学运算 运算是学好数学的基本功。初中阶段是培养数学运算能力的黄金时期,初中代数的主要...

  • 核心素养——运算能力

    小学阶段核心素养的主要表现:运算能力 运算是数学的基本研究对象,也是数学的一种基本思维形式。《普通高中数学课程标准...

  • Octave基础教程

    一、基本操作 数学运算与逻辑运算 数学运算 逻辑运算 向量与矩阵 矩阵 向量 注:构造过程中用“;”分隔,不要用成...

  • 读取数组中最大的值

    ES5 的写法 ES6 的写法 reduce

网友评论

      本文标题:关于ES6的reduce方法来快速找到基本的数学运算

      本文链接:https://www.haomeiwen.com/subject/czxqertx.html