- ???博主介绍:大家好,我是尼克.张,热爱分享知识,很高兴在这里认识大家?
- ?擅长领域:前端开发
- ??如果本文章各位小伙伴们有帮助的话,?关注+??点赞+?评论+?收藏,相应的有空了我也会回访,互助!!!
- ?另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
array.reduce((pre, cur, index, arr)=>{
... }, init);
const b = [1, 2, 3, 4] b.reduce((x, y) => console.log(x, y), 0)
举例说明
1.把数组合并为一个对象
//正常使用forEach循环 let arr = [{
a: 1, b: 10 }, {
a: 2, b: 20 }, {
a: 3, b: 30 }] let obj = {
} arr.forEach((item, index) => {
Object.keys(item).forEach(each => {
obj[`${
each}${
index + 1}`] = item[each] }) }) console.log(obj); //{a1:1,a2:2,a3:3,b1:10,b2:20,b3:30} //使用reduce遍历,可以看出区别在于初始值,以及reduce中必须要return你想要的值 let a = arr.reduce((pre, cur, index) => {
Object.keys(cur).forEach((item) => {
pre[`${
item}${
index + 1}`] = cur[item] }) return pre }, {
}) console.log(a); //{a1:1,a2:2,a3:3,b1:10,b2:20,b3:30}
let arr2 = [9, 4, 3, 6, 9]; //基本类型去重 let set = arr2.reduce((pre, cur) => {
!pre.includes(cur) && pre.push(cur) return pre }, []) console.log(set); //[9,4,3,6]
2.2.引用数据类型去重
let list = [ {
subject: "数学", marks: 80 }, {
subject: "语文", marks: 90 }, {
subject: "英语", marks: 80 }, ] function arrSet(value,arr) {
let obj = {
} let res = arr.reduce((pre, cur) => {
if (!obj[cur[value]]) {
obj[cur[value]] = true pre.push(cur) } return pre }, []) return res } let result = arrSet("marks",list); console.log(result); //[{subject:"数学",marks:80},{subject:"语文":90}]
let arr2 = [9, 4, 3, 6, 9]; let sum = arr2.reduce((pre, cur) => {
return pre + cur },0) console.log(sum) //31
3.2.引用数据类型求和
let arr = [ {
value: 45, }, {
value: 88, }, {
value: 101, }, ]; let newArr = arr.reduce((pre, cur) => {
return pre + cur.value; }, 0); console.log(newArr); //234
4.求最大值和最小值
let arr2 = [9, 4, 3, 6, 9]; let max = arr2.reduce((prev, cur)=> {
return Math.max(prev, cur); }) let min= arr2.reduce((prev, cur)=> {
return Math.min(prev, cur); }) console.log(max,min); //9,3
let arr = [[1, 2, 8], [3, 4, 9], [5, 6, 10]]; let res = arr.reduce((pre, cur) => {
return pre.concat(cur) },[]); console.log(res) //[1, 2, 8, 3, 4, 9, 5, 6, 10]
5.2 多维数组转化为一维
let arr = [[1, [2, 8]], [3, 4, 9], [5, [6, 10]]] function fn(arr) {
return arr.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? fn(cur) : cur); }, []); } const newArr = fn(arr); console.log(newArr); //[1, 2, 8, 3, 4, 9, 5, 6, 10]
6.求字符串中各个字符出现的次数
const str = 'jordanbryantjamescurrydurant'; const res1 = str.split('').reduce((pre, cur) => {
pre[cur] ? pre[cur]++ : pre[cur] = 1; return pre; }, {
}); console.log(res1); //{j:2,o:1,r:5,d:2,...} let arr = [] let num = Math.max(...new Set(Object.values(res1))) let value; for (let keys in res1) {
if (res1[keys] == num) {
value = keys break } } console.log(`出现最多的字母为${
value},出现的次数为${
num}次`); //出现最多的字母为r,出现的次数为5次
- 加v号zyl,第一时间在浏览文章中出现不明白之处,进行交流,共同进步!!!
- 如果这篇文章对你有用,记得留个脚印再走哟~
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/204707.html原文链接:https://javaforall.net
