js循环中reduce的用法简单介绍
reduce() 方法接收一个函数作为累加器,reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(上一次回调的返回值),当前元素值,当前索引,原数组
demo1 数值处理
const arr = [10,20,30,40,50];
const sum = arr.reduce((pre,item,index) => {
console.log('pre--->',pre,'---item--->',item,'---index---->',index);
return pre + item
},100000)
console.log(sum)
zb@zbdeMacBook-Pro vue3test % node ./test.js
pre---> 100000 ---item---> 10 ---index----> 0
pre---> 100010 ---item---> 20 ---index----> 1
pre---> 100030 ---item---> 30 ---index----> 2
pre---> 100060 ---item---> 40 ---index----> 3
pre---> 100100 ---item---> 50 ---index----> 4
100150
demo2 字符串处理统计
const str = 'jshdjsihh';
const obj = str.split('').reduce((pre,item) => {
pre[item] ? pre[item] ++ : pre[item] = 1;
return pre
},{})// 注意:这里pre定义的就是对象
console.log(obj) // {j: 2, s: 2, h: 3, d: 1, i: 1}
demo3 树行tree递归处理
var data = [
{
id: 1,
name: "办公管理",
pid: 0,
children: [{
id: 2,
name: "请假申请",
pid: 1,
children: [
{ id: 4, name: "请假记录", pid: 2 },
],
},
{ id: 3, name: "出差申请", pid: 1 },
]
},
{
id: 5,
name: "系统设置",
pid: 0,
children: [{
id: 6,
name: "权限管理",
pid: 5,
children: [
{ id: 7, name: "用户角色", pid: 6 },
{ id: 8, name: "菜单设置", pid: 6 },
]
}]
}
];
const arr = data.reduce(function(pre,item){
const callee = arguments.callee //将运行函数赋值给一个变量备用
pre.push(item)
//判断当前参数中是否存在children,有则递归处理
if(item.children && item.children.length > 0){
item.children.reduce(callee,pre); //--递归调取处理
}
return pre;
},[]).map((item) => {
item.children = []
return item
})
console.log(arr)
- 结果
[
{ id: 1, name: '办公管理', pid: 0, children: [] },
{ id: 2, name: '请假申请', pid: 1, children: [] },
{ id: 4, name: '请假记录', pid: 2, children: [] },
{ id: 3, name: '出差申请', pid: 1, children: [] },
{ id: 5, name: '系统设置', pid: 0, children: [] },
{ id: 6, name: '权限管理', pid: 5, children: [] },
{ id: 7, name: '用户角色', pid: 6, children: [] },
{ id: 8, name: '菜单设置', pid: 6, children: [] }
]
demo
相信坚持的力量,日复一日的习惯.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2022-03-30 vscode 写vue 常用插件
2018-03-30 phpstorm license 解决
2018-03-30 获从2017-2 到现在所有月份;