【JS】JS高阶函数——reduce()用法详解总结。你不得不知道的数组reduce高级用法!

reduce() 方法对数组中的每个元素执行一个提供的reducer函数(升序执行),将其结果汇总为单个输出值。

语法:




arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

参数:

  • callback:执行数组中每个值的函数,包含四个参数:

    • accumulator:累加器,即上一次回调函数执行时的结果。
    • currentValue:当前数组中处理的元素。
    • index (可选):当前元素在数组中的索引。
    • array (可选):调用reduce的数组。
  • initialValue (可选):作为第一次调用callback函数时的第一个参数的值。

返回值:

  • 返回一个累计结果。

示例:

  1. 简单的求和:



const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, val) => acc + val, 0);
console.log(sum); // 输出:15
  1. 使用对象数组并累加对象属性:



const items = [
  { name: "apple", quantity: 1 },
  { name: "banana", quantity: 2 },
  { name: "orange", quantity: 3 }
];
const totalQuantity = items.reduce((acc, item) => acc + item.quantity, 0);
console.log(totalQuantity); // 输出:6
  1. 数组对象中提取属性:



const users = [
  { id: 1, name: "Alice" },
  { id: 2, name: "Bob" },
  { id: 3, name: "Charlie" }
];
const names = users.reduce((acc, user) => [...acc, user.name], []);
console.log(names); // 输出:["Alice", "Bob", "Charlie"]
  1. 使用reduce进行递归:



const flatten = arr =>
  arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), []);
 
console.log(flatten([1, [2, [3, [4]], 5]])); // 输出:[1, 2, 3, 4, 5]
  1. 使用reduce进行排序:



const sortBy = (prop) => (a, b) => a[prop] > b[prop] ? 1 : -1;
const usersSorted = [
  { name: "Bob", age: 30 },
  { name: "Alice", age: 25 },
  { name: "Charlie", age: 35 }
].sort(sortBy('age'));
console.log(usersSorted);
// 输出排序后的数组:
// [ { name: 'Alice', age: 25 }, { name: 'Bob', age: 30 }, { name: 'Charlie', age: 35 } ]

reduce() 是一个非常强大的工具,可以用于许多不同的场景,包括但不限于:求和、平均数、最大值、最小值、筛选、转换数据结构等。

最后修改于:2024年08月13日 09:05

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日