Js_reduce用法详解(超详细!!!)

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

1.reduce语法

array.reduce(function(pre, currentValue, currentIndex, arr), initialValue)

  1. recude函数接收两个参数,一个为回调函数,一个为初始赋值
  2. 第一个参数的回调函数又接收四个参数,分别为(初始值或计算结束后的返回值,当前元素,当前元素的索引,当前元素所属的数组对象)
  3. 第二个参数是传给函数的初始值,非必传

2.实例解析

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

上面的例子index是从1开始的,第一次的prev的值是数组的第一个值。数组长度是4,reduce函数循环3次。

接下来给initvalue赋予初始值0

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次。

总结:如果没有提供initialValue,reduce 会从索引1的地方开始执行 callback 方法,跳过第一个索引。如果提供initialValue,从索引0开始。

3.结合例题深入理解

(1)计算数组累积结果

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

打印结果
[ 1, 2, 3, 4 ] 24

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

var arr = ["one", "two", "three", "six", "four", "five", "six"];

var newArr = arr.reduce((pre, cur) => {
  console.log(cur, pre);
  if (cur in pre) {
    pre[cur]++;
  } else {
    pre[cur] = 1;
  }
  return pre;
}, {});//这里注意初始值要默认赋予空对象,不然会报错
console.log(newArr);

打印结果
one {}
two { one: 1 }
three { one: 1, two: 1 }
six { one: 1, two: 1, three: 1 }
four { one: 1, two: 1, three: 1, six: 1 }
five { one: 1, two: 1, three: 1, six: 1, four: 1 }
six { one: 1, two: 1, three: 1, six: 1, four: 1, five: 1 }
{ one: 1, two: 1, three: 1, six: 2, four: 1, five: 1 }

(3)数组去重

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]

(4)数组扁平化 二维转一维

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]

(5)数组扁平化 多维转一维

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]

(6)对象属性求和

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文章来源地址https://www.toymoban.com/news/detail-571991.html

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

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

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

相关文章

  • 深入解析JavaScript中箭头函数的用法

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

    2024年01月20日
    浏览(50)
  • JavaScript:setInterval() 用法详解

    setInterval() 是 JavaScript 中的一个内置函数,它用于在指定的间隔时间内重复执行一段代码,实现周期性操作。该函数的语法如下: function :必需,要重复执行的函数或代码块。 milliseconds :必需,重复执行的时间间隔(以毫秒为单位)。 param1, param2, ... :可选,传递给要执行

    2024年02月09日
    浏览(33)
  • JavaScript的定时器用法详解

    ●在 js 里面,有两种定时器,倒计时定时器 和 间隔定时器 ○倒计时定时器也叫一次性定时器或者叫延时定时器 ○间隔定时器也叫间歇定时器或者叫反复性定时器 倒计时定时器 ●倒计时多少时间以后执行函数 ●语法: setTimeout(要执行的函数,多长时间以后执行) ●会在你设

    2024年02月14日
    浏览(44)
  • JavaScript 中的 Window.open() 用法详解

    window.open() 方法是 JavaScript 中的一个内置方法,用于在浏览器中打开一个新的窗口或标签页。 这个方法的语法是: 需要注意的是,由于弹出窗口的滥用已经成为了一个安全问题,现代浏览器通常会默认阻止 window.open() 方法的调用,除非是在用户的交互下触发的。因此,在实际

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

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

    2024年02月02日
    浏览(44)
  • JavaScript节流功能(js节流函数,节流功能的应用与解析,深入了解JavaScript节流函数)

    简述:上篇文章介绍了js防抖功能,这期说下js节流功能。节流就是某一高频事件不断被触发时,将多次执行变成每隔一段时间执行,具体点就是减少一个事件在一段时间内的触发频率,它是一种常用的函数优化技术,可以限制函数的执行频率,从而提高网页的性能和用户体验

    2024年02月13日
    浏览(44)
  • 【ES6】JavaScript 中的数组方法reduce

    reduce() 是一个 JavaScript 中的数组方法,它会对数组的每个元素执行一个提供的 reducer 函数,将其减少到一个单一的值。 这是 reduce() 的基本用法: 这里: callback 是一个用于每个数组元素的函数,接受四个参数: accumulator:累加器累加回调的返回值。它是上一次调用回调时返回

    2024年02月10日
    浏览(33)
  • JavaScript深拷贝(js深拷贝,JavaScript递归函数,实现深拷贝)

    简述:JavaScript的深拷贝和浅拷贝大家都比较熟悉,今天来分享下深拷贝,就是使用该函数时,会复制拷贝一份该数据,修改该数据属性,不会改变原有数据,就是把复制的对象所引用的对象全都复制了一遍,具体实现如下; 1、定义拷贝对象; 2、定义递归函数deepClone(),实现

    2024年02月15日
    浏览(62)
  • 细说JavaScript函数(JavaScript函数详解)

    函数的作用就是封装一段JavaScript代码,让开发者可以通古简单的方式使用这段代码 一、函数的分类 在几乎所有的编程语言中,都有函数这一概念,并且没中语言本身都继承了丰富的函数,这类函数被称为系统函数或者内置函数,系统函数在语言设计时就已经定义好了,开发

    2024年02月01日
    浏览(46)
  • JavaScript 之 常用迭代方法forEach、filter()、map()、reduce()

    代码如下: 如下: 代码简洁很多,如下: 简介 : filter() 方法创建给定数组一部分的浅拷贝,其包含通过所提供函数实现的测试的所有元素。 语法 : 参数、返回值 描述 参考官网: 官网——Array.prototype.filter(). 代码如下: 代码如下: 下例使用 filter() 根据搜索条件来过滤数

    2024年02月09日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包