js中reduce()函数的用法

这篇具有很好参考价值的文章主要介绍了js中reduce()函数的用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js reduce,js,javascript,前端,开发语言

😁 作者简介:一名大三的学生,致力学习前端开发技术
⭐️个人主页:夜宵饽饽的主页
❔ 系列专栏:JavaScript小贴士
👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气

​🔥​前言:

这是我自己有关array.prototype.reduce()函数的用法的总结,如有不足和错误,欢迎大家更好的补充和纠正

1.Array.prototype.reduce()函数的用法

定义:

reduce()方法对每一个数组的每一个元素按序执行一个由您提供的reduce函数。每一次运行reduce会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

第一次执行回调函数时,不存在“上一次的计算结果”。如果需要回调函数从数组索引为0的开始执行,则需要传递初始值,否则数组的索引为0的值作为初始值initalValue,迭代器从第二个元素开始执行(索引为1而不是0)

语法

reduce((previousValue, currentValue, currentIndex, array) => { /* … */ }, initialValue)

参数:

callbackfn

一个“reduce”函数,包含四个参数:

  • previousValue:上一次调用callbackFn时的返回值,在一次调用时,若指定初始值initialValue,其值为initalvalue,否则为数组索引为0的元素array[0]
  • currentValue:数组中正在处理的元素,在第一次调用时,若指定初始值initalValue,其值则为数组索引为0的元素array[0],否则为array[1]
  • currentIndex:数组中正在处理的元素索引,若指定了初始值initvalue,则起始索引号,否则从索引1起的。
  • array:用于遍历的数组

initalvalue(可选)

作为第一次调用callback函数时的参数previousValue的值,若指定了初始值initalValue,则currentValue则将使用数组第一个元素,否则previosValue的值是将是数组的第一个元素,而currentValue将使用数组第二个元素

返回值

使用reduce回调函数遍历整个数组后的结果

异常

TypeError

数组为空且初始值未提供

扩展知识点:

如果数组为空且未指定初始值 initialValue,则会抛出 TypeError

reduce 不会直接改变调用它的对象,但对象可被调用的 callbackfn 所改变。遍历的元素范围是在第一次调用 callbackfn 之前确定的。所以即使有元素在调用开始后被追加到数组中,这些元素也不会被 callbackfn 访问。如果数组现有的元素发生了变化,传递给 callbackfn 的值将会是元素被 reduce 访问时的值(即发生变化后的值);在调用 reduce 开始后,尚未被访问的元素若被删除,则其将不会被 reduce 访问。

基本使用

1.将二维数组转化为一维

    //将二维数组转化一维数组
    let fla=[[0,1],[2,3],[4,5]].reduce(
        function(pre,cur){
            return pre.concat(cur)
        },
        []
    )

    console.log("二维数组转化一维数组:"+fla);
//二维数组转化一维数组:0,1,2,3,4,5

2.计算数组中每一个元素出现的次数

 //计算数组中每一个元素出现的次数
    let names=['Alice','Bob','Tiff','Bruce','Alice']
    
    let countedNames=names.reduce((allName,curname) =>{
        if(curname in allName){
            allName[curname]++   
        }
        else{
            allName[curname]=1
        }
        return allName              
    },{})

    console.log(countedNames);
//{ Alice: 2, Bob: 1, Tiff: 1, Bruce: 1 }

3.按属性对object分类

let peple=[
        {name:'Alice',age:21},
        {name:'Mex',age:20},
        {name:'Jane',age:20}
    ];
  
    function groupBy(objectArray,property) {
        return objectArray.reduce(function(pre,cur){
                let key=cur[property]
                if(!pre[key]){
                    pre[key]=[]
                }
                pre[key].push(cur)
                return pre
        },{})
    }

    let groupByPeople=groupBy(peple,'age')

    console.log(groupByPeople)
/**{
  '20': [ { name: 'Mex', age: 20 }, { name: 'Jane', age: 20 } ],
  '21': [ { name: 'Alice', age: 21 } ]
}*/

4.使用扩展运算符和initialValue绑定包含在对象数组中的数组

let friends = [{
        name: 'Anna',
        books: ['Bible', 'Harry Potter'],
        age: 21
      }, {
        name: 'Bob',
        books: ['War and peace', 'Romeo and Juliet'],
        age: 26
      }, {
        name: 'Alice',
        books: ['The Lord of the Rings', 'The Shining'],
        age: 18
      }]

      let allbook=friends.reduce((pre,cur) =>{
            let key=cur['books']
            return [...pre,...key]


      },['alphoter'])
      console.log(allbook);

/**
[
  'alphoter',
  'Bible',
  'Harry Potter',
  'War and peace',
  'Romeo and Juliet',
  'The Lord of the Rings',
  'The Shining'
]
*/

6.数组去重

  //数组去重
      let myArray = ['a', 'b', 'a', 'b', 'c', 'e', 'e', 'c', 'd', 'd', 'd', 'd']
      const myArrayNo =myArray.reduce(function(pre,cur){
            if(pre.indexOf(cur)==-1){
                pre.push(cur)
            }
            return pre
      },[])

      console.log(myArrayNo);
//[ 'a', 'b', 'c', 'e', 'd' ]

7.使用reduce 实现map

 if (!Array.prototype.mapUsingReduce) {
        Array.prototype.mapUsingReduce = function(callback, initialValue) {
          return this.reduce(function(mappedArray, currentValue, currentIndex, array) {
            mappedArray[currentIndex] = callback.call(initialValue, currentValue, currentIndex, array)
            return mappedArray
          }, [])
        }
      }
      
      [1, 2, , 3].mapUsingReduce(
        (currentValue, currentIndex, array) => currentValue + currentIndex + array.length
      ) // [5, 7, , 10]

最后

🌼 如果觉得笔者写的不错,可以看看笔者以下的文章喔 😃文章来源地址https://www.toymoban.com/news/detail-724580.html

  • JavaScript中的模块化Module语法的使用细节:export命令和imprt命令详细使用
  • 学习JavaScript的this的使用和原理
  • 【ES6标准入门】JavaScript中的Generator函数的使用和细节,异步操作思路之一
  • 【ES6的标准入门】JavaScript中Set、Map与弱引用版本:WeakSet和WeakMap优雅的数据管理技巧
  • 【原型详解】JavaScript原型链:深入了解Prototype,超级详细!!!

到了这里,关于js中reduce()函数的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 30个前端开发中常用的JavaScript函数

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 在前端开发中通常会用到校验函数,检验是否为空、手机号格式、身份证格式等等。现按照用途分类整理出了30个常用的方法,在V

    2024年02月14日
    浏览(34)
  • 建站系列(五)--- 前端开发语言之HTML、CSS、JavaScript

    建站系列(一)— 网站基本常识 建站系列(二)— 域名、IP地址、URL、端口详解 建站系列(三)— 网络协议 建站系列(四)— Web服务器之Apache、Nginx 建站系列(五)— 前端开发语言之HTML、CSS、JavaScript 建站系列(六)— 后端开发语言 建站系列(七)— 常用前后端框架

    2024年02月09日
    浏览(40)
  • JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

    早期的网页都是通过后端渲染来完成的,即服务器端渲染(SSR,server side render): 客户端发出请求 - 服务端接收请求并返回相应HTML文档 - 页面刷新,客户端加载新的HTML文档; 服务器端渲染的缺点: 当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数

    2024年02月16日
    浏览(48)
  • 大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

    一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计算技术的B/S架构的医院管理系统(简称云HIS),采用前后

    2024年02月03日
    浏览(35)
  • 前端基础3——JavaScript基础用法

    JavaScript(简称JS):是一种轻量级客户端脚本语言,通常被直接嵌入HTML 页面,在浏览器上执行。 JavaScript作用:改变页面中的HTML元素、属性、样式、事件。 内嵌样式,在body标签中使用。 1.在body标签中写js脚本。 2.查看效果。 在head标签中使用。 1.编写js脚本main.js,统一存放

    2024年02月10日
    浏览(38)
  • 前端jd要求:了解一门后端开发语言优先 解决方案之Node.js

    作为前端开发者,了解一门后端开发语言可以为我们提供更多的职业机会和技术优势。在当今的技术领域中,前后端分离的开发模式已经成为主流,前端和后端的协作和沟通变得越来越紧密。因此,作为前端开发者,学习一门后端语言已经成为提高自己技能的重要途径。 以下

    2024年02月12日
    浏览(39)
  • 深入解析JavaScript中箭头函数的用法

    🧑‍🎓 个人主页: 《爱蹦跶的大A阿》 🔥 当前正在更新专栏: 《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​  ​         箭头函数(Arrow function)是JavaScript ES6中引入的一大特性。箭头函数与传统函数有一些区别,可以帮助我们简化代码并处理一些棘

    2024年01月20日
    浏览(37)
  • 除了three.js,还有许多其他前端开发语言和库可以用于创建3D可视化大屏

    hello老铁们...本人熟悉html5,vue对bootsrap,uniapp,layui,element,vite,antd,echarts,jq响应式尤其擅长,ui设计等技能,如果ui前端工作中有遇到烦恼可私信关注评论我们共同交流进步!谢谢       随着前端技术的飞速发展,3D可视化已经成为许多应用场景中不可或缺的一部分。在

    2024年03月15日
    浏览(48)
  • JavaScript高级技巧:深入探索JavaScript语言的高级特性和用法

    当我们谈论JavaScript高级技巧时,以下是一些示例来说明这些概念: 闭包(Closures): 在上面的例子中, innerFunction 是一个闭包,它可以访问外部函数 outerFunction 中的 outerVariable 变量,即使在外部函数执行结束后也可以。 高阶函数(Higher-Order Functions): 在上面的例子中,

    2024年02月08日
    浏览(35)
  • js中.sort()函数的用法

    这是.sort()函数最常见的用法 但或许你还对其为什么要这么操作存有一些疑惑 我们要先搞懂往.sort()里传入的函数的参数a,b是什么 sort()要排序就要遍历数组,以上面的数组为例子 其中遍历第一步的a=3、b=2, 第二步时候a=2、b=3, 第三步的时候a=3,b=34 。。。。。。。 就像你写

    2024年02月02日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包