位置: IT常识 - 正文

JS操作数组神器——reduce(求和、出现次数、去重、分类)(js数组菜鸟教程)

编辑:rootadmin
JS操作数组神器——reduce(求和、出现次数、去重、分类) 一、简介

推荐整理分享JS操作数组神器——reduce(求和、出现次数、去重、分类)(js数组菜鸟教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js数组操作方法,js数组操作方法大全,js操作数组神器怎么用,js数组菜鸟教程,js操作数组有哪些方法,分别有什么用,js 操作数组,js数组操作方法大全,js 操作数组,内容如对您有帮助,希望把文章链接给更多的朋友!

reduce() 对数组每个元素执行一次由您提供的reduce函数(升序执行),将其结果汇总为单个返回值。

循环遍历能做的,reduce都可以做。比如数组根据元素某个属性求和、数组元素出现次数、数组去重、数组根据某个元素属性分类等等。

arr.reduce((prev, cur, index, arr) => { return prev + cur}, 0)

参数介绍

prev 必需。累计器累计回调的返回值; 表示上一次调用回调时的返回值,或者初始值 init;cur 必需。表示当前正在处理的数组元素;index 可选。表示当前正在处理的数组元素的索引,若提供 init 值,则起始索引为0,否则起始索引为1;arr 可选。表示原数组;init 可选。表示初始值。

以下为有无 init 的区别 演示代码

console.log('-------有init---------')const arr = [1, 2, 3, 4, 5]const sum = arr.reduce((prev, cur, index, arr) => { console.log(prev, cur, index, arr) return prev + cur}, 0)console.log(arr, sum)console.log('-------无init---------')const arr2 = [1, 2, 3, 4, 5]const sum2 = arr.reduce((prev, cur, index, arr) => { console.log(prev, cur, index, arr) return prev + cur})console.log(arr2, sum2)

输出结果

-------有init---------0 1 0 [ 1, 2, 3, 4, 5 ]1 2 1 [ 1, 2, 3, 4, 5 ]3 3 2 [ 1, 2, 3, 4, 5 ]6 4 3 [ 1, 2, 3, 4, 5 ]10 5 4 [ 1, 2, 3, 4, 5 ][ 1, 2, 3, 4, 5 ] 15-------无init---------1 2 1 [ 1, 2, 3, 4, 5 ]3 3 2 [ 1, 2, 3, 4, 5 ]6 4 3 [ 1, 2, 3, 4, 5 ]10 5 4 [ 1, 2, 3, 4, 5 ][ 1, 2, 3, 4, 5 ] 15二、求和

假如我们想把对商品的价格进行求和 演示代码

// 根据数组对象某个属性求和const shopList = [ { id: 1, name: '苹果', isDeleted: false, num: 2, price: 5999 }, { id: 2, name: '小米', isDeleted: false, num: 1, price: 3999 }, { id: 3, name: '华为', isDeleted: true, num: 3, price: 4999 }]let shopListSum = shopList.reduce((prev, item) => { prev += item.num * item.price return prev}, 0)console.log(shopListSum)JS操作数组神器——reduce(求和、出现次数、去重、分类)(js数组菜鸟教程)

输出结果

30994三、出现次数

假如我们想计算每件商品的搜索次数 演示代码

// 计算数组元素次数const nameList = ['xiaomi', 'huawei', 'pingguo', 'xiaomi', 'huawei', 'huawei']let countedNameObj = nameList.reduce((prev, item) => { if (item in prev) { prev[item]++ } else { prev[item] = 1 } return prev}, {})console.log(countedNameObj)

输出结果

{ xiaomi: 2, huawei: 3, pingguo: 1 }四、去重

可分为直接去重和排序后去重

1.直接去重 演示代码

const nameList = ['xiaomi', 'huawei', 'pingguo', 'xiaomi', 'huawei', 'huawei']let newNameList = nameList.reduce((prev, item) => { if (prev.indexOf(item) === -1) { prev.push(item) } return prev}, [])console.log(newNameList)

输出结果

[ 'xiaomi', 'huawei', 'pingguo' ]

2.排序后去重 演示代码

const numList = [1, 4, 5, 5, 7, 5, 8, 1, 2, 3, 4, 5, 9, 1, 2]let newNumList = numList.sort().reduce((prev, item) => { if (prev.length === 0 || prev[prev.length - 1] !== item) { prev.push(item) } return prev}, [])console.log(newNumList)

输出结果

[1, 2, 3, 4, 5, 7, 8, 9]五、分类

假如我们想把商品数组里面上架和未上架的商品分类 演示代码

// 根据数组对象某个属性分类const shopList = [ { id: 1, name: '苹果', isDeleted: false }, { id: 2, name: '小米', isDeleted: false }, { id: 3, name: '华为', isDeleted: true }]function groupBy(list, pros) { return list.reduce((prev, item) => { let key = item[pros] if (!prev[key]) { prev[key] = [] } prev[key].push(item) return prev }, {})}let myShopList = groupBy(shopList, 'isDeleted')console.log(myShopList)

输出结果

{ false: [ { id: 1, name: '苹果', isDeleted: false }, { id: 2, name: '小米', isDeleted: false } ], true: [ { id: 3, name: '华为', isDeleted: true } ]}
本文链接地址:https://www.jiuchutong.com/zhishi/299678.html 转载请保留说明!

上一篇:做一个前端网页送给女朋友~轮播图+纪念日(前端作业做一个网站)

下一篇:web前端框架——Vue的特性(web前端框架是什么)

  • 扬州健康码变黄了怎么办(扬州健康码怎么变成黄色)

    扬州健康码变黄了怎么办(扬州健康码怎么变成黄色)

  • 荣耀50se有指纹解锁功能吗(荣耀50se指纹锁怎么设置)

    荣耀50se有指纹解锁功能吗(荣耀50se指纹锁怎么设置)

  • keep能投屏到电视吗(keep能否投屏到电视)

    keep能投屏到电视吗(keep能否投屏到电视)

  • 拼多多点击率多少正常(拼多多点击率多少才算爆款)

    拼多多点击率多少正常(拼多多点击率多少才算爆款)

  • 苹果怎么下载超过200MB的应用(苹果怎么下载超话app)

    苹果怎么下载超过200MB的应用(苹果怎么下载超话app)

  • 华为mate30使用功能介绍

    华为mate30使用功能介绍

  • vivo手机摔了一下黑屏打不开怎么办(vivo手机摔了一下触屏失灵怎么办)

    vivo手机摔了一下黑屏打不开怎么办(vivo手机摔了一下触屏失灵怎么办)

  • 三星buds和三星buds区别(三星buds和三星buds+音质区别)

    三星buds和三星buds区别(三星buds和三星buds+音质区别)

  • 快手闪电购和小黄车有什么区别(快手闪电购和小黄车能一起直播买货吗)

    快手闪电购和小黄车有什么区别(快手闪电购和小黄车能一起直播买货吗)

  • 腾讯视频vip怎么看到期时间(腾讯视频vip怎么买便宜)

    腾讯视频vip怎么看到期时间(腾讯视频vip怎么买便宜)

  • 如何一键取消全部隐藏(如何一键取消全部隐藏窗口)

    如何一键取消全部隐藏(如何一键取消全部隐藏窗口)

  • 荣耀9xpro值得买吗

    荣耀9xpro值得买吗

  • 爱奇艺怎么两人一起同步看(爱奇艺怎么两人共用一个vip2022)

    爱奇艺怎么两人一起同步看(爱奇艺怎么两人共用一个vip2022)

  • 优酷app怎样加好友(手机优酷如何添加好友)

    优酷app怎样加好友(手机优酷如何添加好友)

  • 爱奇艺会员一个月怎么算(爱奇艺会员一个季度是几个月)

    爱奇艺会员一个月怎么算(爱奇艺会员一个季度是几个月)

  • 电脑无信号是什么情况(电脑无信号是什么原因,应该怎么处理)

    电脑无信号是什么情况(电脑无信号是什么原因,应该怎么处理)

  • winxp是什么系统

    winxp是什么系统

  • 淘宝双十二报名时间(淘宝双十二报名后不能满减)

    淘宝双十二报名时间(淘宝双十二报名后不能满减)

  • 手机qq相册怎么设置权限(手机qq相册怎么改相册名字)

    手机qq相册怎么设置权限(手机qq相册怎么改相册名字)

  • 手机打电话录音保存在哪里(手机打电话录音在哪里能找到)

    手机打电话录音保存在哪里(手机打电话录音在哪里能找到)

  • 手机怎样修改路由器的密码(手机怎样修改路由器wifi密码修改)

    手机怎样修改路由器的密码(手机怎样修改路由器wifi密码修改)

  • 手机太烫怎么降温(手机太烫怎么降温?)

    手机太烫怎么降温(手机太烫怎么降温?)

  • win10商店怎么换中文(win10商店如何改地区)

    win10商店怎么换中文(win10商店如何改地区)

  • Linux命令之nano命令(linux的nano是什么意思)

    Linux命令之nano命令(linux的nano是什么意思)

  • HTML 事件参考手册

    HTML 事件参考手册

  • 过头税产生的根源
  • 税前利润包含营业税吗
  • 上市审计费入账
  • 工会经费如何申报?
  • 施工单位企业所得税
  • 五证合一流程
  • 员工迟到扣款该怎么处理
  • 购买原材料已付款怎么记账
  • 企业之间利息收入怎么做账
  • 小规模纳税人提供设计服务税率
  • 专票已经抵扣购买方如何处理
  • 购买商品成本要支付哪些成本
  • 全资子公司合并抵消
  • 取消票种核定需什么手续
  • 融资租入固定资产计提折旧吗
  • win10下载软件被阻止安装怎么办
  • 开发票时已交的税金怎么做帐?
  • 辞职的补偿金怎么做账
  • 无法添加用户和组
  • 企业工会经费计提比例
  • 笔记本如何打开无线网络开关
  • window10为什么没有本地用户和组
  • regsync.exe - regsync是什么进程 有什么用
  • 拆除固定资产
  • 应收账款怎么做会计分录
  • thinkphp5.1教程
  • 境外向国内汇款新规
  • 夸克到底有什么用
  • 印花税土地使用权计税依据
  • 小规模纳税人的增值税计入成本吗
  • 销售收入和营业收入的关系
  • 残疾人报税怎么报
  • 小程序渲染是什么意思
  • python 函数的返回值
  • open com failed
  • mongodb进阶与实战下载
  • 银行日记账跨月登记方法
  • 计提以前年度的企业所得税
  • 差额征税可以开专票抵扣吗
  • 征地拆迁的费用可以作为资产吗
  • 高铁票该怎么申领
  • mysql获取字段值的长度
  • sqlserver最大数据量
  • 核定征收企业盈利怎么算
  • 企业补缴税款如何申报
  • 付款退回怎么做账
  • 应付职工薪酬的账务处理
  • 付款金额与收到款的关系
  • 收到现金货款怎么处理
  • 驾校挂靠车辆账务处理是?
  • 出口运保费是什么费用
  • 总公司与分公司账务处理
  • 进口增值税与关税发票哪里打印?
  • 企业生育津贴发放细则
  • 支票取钱不是本人要带什么
  • mysql必知必会读书心得
  • sqlserver存储过程在哪里
  • xp系统英文版怎么改成中文
  • wind2003
  • win10出现未知错误
  • 如何将iPhone照片导入电脑
  • winctlad.exe - winctlad是什么进程
  • windows使用svn命令
  • 2019谷歌浏览器
  • win7怎么自启动程序
  • redhat linux安装
  • win7硬盘访问权限怎么解除
  • nodejs入门教程
  • android属性大全
  • python tcp socket
  • unity3D游戏开发
  • mybatis框架执行流程
  • pygame实例
  • python基本用法
  • html购物网站
  • jq form提交
  • 北京市社会团体
  • 公司注销时注册资金未缴完
  • 完税证明在哪里查询打印
  • 国家税务总局全国增值税查验平台
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设