首页 > 其他分享 >数组之reduce方法详解

数组之reduce方法详解

时间:2022-10-24 15:33:19浏览次数:48  
标签:const name reduce next 详解 数组 prev id

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>数组之reduce方法</title>
</head>
<body>
<script>
// reduce() 方法不会改变原始数组 在没有初始值的空数组上调用 reduce 将报错
// 语法:Array.reduce(callback,[initialValue])
// Array.reduce()方法是对数组的遍历,返回一个单个返回值
// 使用方法:
// Array.reduce((acc, cur, idx, src) => {
// }, initialValue)
// callback回调函数接收4个参数: (acc 上一次调用回调返回的值,或者是提供的初始值(initialValue))
// Accumulator (acc) (累计器) 如果传入了initialValue,Accumulator的初始值就是initialValue,没传入就是数组的第一个值
// Current Value (cur) (当前值)
// Current Index (idx) (当前索引)如果传入了initialValue,索引从0开始,没传入从1开始
// Source Array (src) (源数组)
// initialValue 指定的初始值,初始值可以是数字,数组,对象

// 将一个数组类型转换成一个对象;
// 展开一个超大的 Array;
// 完成对数组的两次计算,但只遍历一次;
// 在一次调用动作里,同时实现 mapping和 filter 的功能;
// 运行异步方法队列
const householdArr = [{
id: 1,
name: '电视',
price: '500'
},
{
id: 2,
name: '冰箱',
price: '600'
}
];

function ArrayToObject(arr, obj) {
return {
...arr,
[obj.name]: obj
};
}
const householdObj = householdArr.reduce(ArrayToObject, {});
console.log(householdObj, 'householdObj');
// {
// 电视: {id: 1, name: '电视', price: '500'}
// 冰箱: {id: 2, name: '冰箱', price: '600'}
// }

// reduce 展开一个超大的 Array
const reduceArr = [
'react,vue,nodejs',
'elementui,vant,iview',
'前端,后端,测试,产品,运维,UI'
];

function reduceArray(arr, item) {
return arr.concat(item.split(/,/g));
}
const reduceAfterArr = reduceArr.reduce(reduceArray, []);
console.log(reduceAfterArr);
// ['react', 'vue', 'nodejs', 'elementui', 'vant', 'iview', '前端', '后端', '测试', '产品', '运维', 'UI']

// reduce 找出数组中 最大数 最小数
const minAndMaxList = [1, 3, 5, 8, 9, 10, 22];

function findMinMax(acc, itme) {
return {
minNum: Math.min(acc.minNum, itme),
maxNum: Math.max(acc.maxNum, itme),
};
}
const resultMinMax = {
minNum: Number.MAX_VALUE,
maxNum: Number.MIN_VALUE,
};
const minMax = minAndMaxList.reduce(findMinMax, resultMinMax);
console.log(minMax, '最小值和最大值'); // {minNum: 1, maxNum: 22} '最小值和最大值'

// reduce 求和
const initialValue = 0;
const arr = [0, 1, 2, 3, 4, 5, 6];
const sum = arr.reduce(function(acc, cur) {
console.log(acc, cur);
return acc + cur
}, initialValue)
console.log(sum) // 21

// reduce 数组扁平化 flat
const flatArr = [1, 2, [3, 4, [5, 6]]];
const reslut = (arr) => {
return arr.reduce((prev, next) => {
return prev.concat(Array.isArray(next) ? reslut(next) : next);
}, [])
}
console.log(reslut(flatArr)) // [ 1, 2, 3, 4, 5, 6 ]

// reduce 数组去重
let repeatArr = [1, 1, 2, 1, 3, 4, 5, 3];
let result = repeatArr.reduce((prev, next) => {
if (!prev.includes(next)) {
prev.push(next)
}
return prev
}, [])
console.log(result) // [ 1, 2, 3, 4, 5 ]

// reduce 重复次数统计
const data = [{
name: 'bob',
id: '1'
},
{
name: 'bob',
id: '2'
},
{
name: 'wowo',
id: '3'
},
{
name: 'lala',
id: '4'
},
{
name: 'lala',
id: '5'
},
{
name: 'wowo',
id: '6'
},
]

const repeatNum = data.reduce((prev, next) => {
[next.name] in prev ? ++prev[next.name] : prev[next.name] = 1
return prev

}, {})
console.log(repeatNum) // {bob: 2, wowo: 2, lala: 2}
</script>
</body>
</html>

运行结果

数组之reduce方法详解_运维

标签:const,name,reduce,next,详解,数组,prev,id
From: https://blog.51cto.com/u_15785499/5789921

相关文章

  • c语言数组(c语言数组求平均值)
    C语言数组有哪些特点呢?一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型C语言中一维数组中的数组大小可以省略吗?C语言中一维数组中的数组大小是......
  • #yyds干货盘点# 动态规划专题:乘积为正数的最长连续子数组
    1.简述:描述给定一个长度为n的整数数组,请你找出其中最长的乘积为正数的子数组长度。子数组的定义是原数组中一定长度的连续数字组成的数组。数据范围:  ,数组中的元素满......
  • #yyds干货盘点# 动态规划专题:环形数组的连续子数组最大和
    1.简述:描述给定一个长度为  的环形整数数组,请你求出该数组的 非空 连续子数组 的最大可能和。环形数组 意味着数组的末端将会与开头相连呈环状。例如,对于数组 而言,......
  • 数据结构 数组动态数组
    数据结构:批量管理和维护数据。一维数组string[]Name=newstring[3];string数组存储的数据类型,Name数组名称new通过new操作符返回新数组对象string[3]定义数组的元......
  • 找出数组内key包括指定字符串所包含的对象
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"c......
  • 实验三 数组、指针与现代C++标准库
    实验任务五Info.hpp#pragmaonce#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classInfo{private:stringnickname;st......
  • 【JS】501- 一文学会判断变量是否为数组
    日常开发中,我们经常遇到这种情况,需要我们判断变量是否是一个数组类型。那么今天我把常用的判断变量是否是数组类型的方法,整理在这里:一、常用方法1.Object.prototype.toStri......
  • Linux grep 命令详解
    Linuxgrep命令用于查找文件里符合条件的字符串。grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样......
  • 实验3 数组、指针与现代C++标准库
    实验3数组、指针与现代C++标准库task5Info.hpp#include<iostream>#include<string>usingstd::string;usingstd::cout;usingstd::cin;usingstd::endl;cla......
  • js中数组过滤filter的使用理解(小白级别)
    js中数组过滤filter的使用理解​​filter方法的介绍​​​​详细解读​​filter方法的介绍数组的filter方法用于过滤数组中不符合条件的元素,这个方法不会修改原数组。如何使......