reduce的性能简测

本文探讨了JavaScript中使用reduce和for循环实现数据分组的性能差异。作者通过创建一个包含五百万条数据的列表,分别用reduce和for循环进行分组操作,并进行了多次测试。结果显示,尽管for循环在大数据量下表现优于reduce,但reduce的代码简洁性使其在某些场景下更具吸引力。测试平均值显示reduce耗时446.833毫秒,而for循环耗时382.0286毫秒。
摘要由CSDN通过智能技术生成

偶然看到项目中用的reduce,很少使用,就百度看了些实例,发现这玩意很有意思,特别是看到一个实现groupBy的实现方法,就做了个与for寻源的性能对比(主要是像记录一下,记性太差了)
测试环境: node
使用for循环 reduce对比贴代码
数据量: 5000 50000 500000 5000000

function groupByR(array, name){
    return array.reduce((acc, cur) => {
      let o = cur[name]
      acc[o] = acc[o] || []
      acc[o].push(cur)
      return acc
    }, {})
}

function groupByF( array , id ) {
    let groups = {};
    for( var i=0; i<array.length; i++ ){
      let group = array[i][id];
        groups[group] = groups[group] || [];
        groups[group].push( array[i] );
    }
    return Object.values(groups);
}

for(var i=0; i<5000000; i++){
  if (i%2) {
    listFor.push({"name": "小张","Average":15,"High":10,"DtmStamp":1358226000000})
  } else if ( i%3 ) {
    listFor.push({"name": "小红","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%4 ) {
    listFor.push({"name": "小李","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%5 ) {
    listFor.push({"name": "小芳","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%6 ) {
    listFor.push({"name": "小田","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%7 ) {
    listFor.push({"name": "小赵","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%8 ) {
    listFor.push({"name": "小天","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%9 ) {
    listFor.push({"name": "小许","Average":16,"High":92,"DtmStamp":1358226000000},)
  } else if( i%10 ) {
    listFor.push({"name": "小刘","Average":16,"High":92,"DtmStamp":1358226000000},)
  }
}
console.time('reduce分组')
let groupR = Object.values( groupByR(listFor, 'name'))
console.timeEnd('reduce分组', groupR)
console.log(groupR)

这里reduce:
5000: 在这里插入图片描述
50000: 在这里插入图片描述
500000:在这里插入图片描述
5000000:在这里插入图片描述

这里 for的结果
5000:在这里插入图片描述
50000: 在这里插入图片描述
500000:在这里插入图片描述
5000000:在这里插入图片描述
两种对比五百万条数据的情况下分别做了5次测试,取平均值
reduce: 446.833
for: 382.0286

大数据量的情况下依然时for循环完胜,但是reduce胜在写法简便,不用额外定义太多属性就能完成简单的数据分组。

文章简陋有错误求指正,仅作为记录文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值