zoukankan      html  css  js  c++  java
  • js 数组求和,多种方法,并比较性能

    可以借用下面12种方法对数组求和,创建一个长度为10w的数组,进行测试

    • every()       检测数值元素的每个元素是否都符合条件。 
    • filter()      检测数值元素,并返回符合条件所有元素的数组。 
    • map()        通过指定函数处理数组的每个元素,并返回处理后的数组。 
    • some()       用于检测数组中的元素是否满足指定条件(函数提供)。 
    • reduce()       数组中的每个值(从左到右)开始合并,最终为一个值 
    • reduceRight()    数组中的每个值(从右到左)开始合并,最终为一个值 
    • eval()         计算 JavaScript 字符串,并把它作为脚本代码来执行。 
    • for            循环代码块一定的次数 
    • while         当指定的条件为 true 时循环指定的代码块 
    • do/while       同样当指定的条件为 true 时循环指定的代码块 
    • for in         循环遍历对象的属性 
    • forEach      调用数组中的每个元素。    

      具体实现:

        首先创建一个庞大的数组:

        var aArr = [];

        for(var i = 0;i < 1000000;i++){

         aArr.push(i);

          }

      

    (function(){
                    //every
                    var _sum = 0;
                    console.time('every求和时间');
                    aArr.every(function(item,index){
                        _sum += item;
                        return true;//every每个值都运行
                    })
                    console.log('every求和: '+_sum);
                    console.timeEnd('every求和时间');
                    
                    //filter
                    var _sum = 0;
                    console.time('filter求和时间');
                    aArr.filter(function(item,index){
                        _sum += item;
                    })
                    console.log('filter求和: '+_sum);
                    console.timeEnd('filter求和时间');
    
                    //map
                    var _sum = 0;
                    console.time('map求和时间');
                    aArr.map(function(item,index){
                        _sum += item;
                    })
                    console.log('map求和: '+_sum);
                    console.timeEnd('map求和时间');
                    
                    //some
                    var _sum = 0;
                    console.time('some求和时间');
                    aArr.some(function(item,index){
                        _sum += item;
                    })
                    console.log('some求和: '+_sum);
                    console.timeEnd('some求和时间');
                    
                    //reduce
                    console.time('reduce求和时间');
                    var prev;
                    aArr.reduce(function(prev,item,index){
                        prev += item;
                    })
                    console.log('reduce求和: '+_sum);
                    console.timeEnd('reduce求和时间');
                    
                     //reduceRight
                    console.time('reduceRight求和时间');
                    var next;
                    aArr.reduceRight(function(next,item,index){
                        prev += item;
                    })
                    console.log('reduceRight求和: '+_sum);
                    console.timeEnd('reduceRight求和时间');
                    
                    //eval
                    console.time('eval求和时间');
                    var _sum = eval(aArr.join('+'));
                    console.log('eval求和: '+_sum);
                    console.timeEnd('eval求和时间');
                    
                    //for
                    console.time('for(var i = 0,len = aArr.length;i < len;i++)求和时间');
                    var _sum = 0;
                    for(var i = 0,len = aArr.length;i < len;i++){
                        _sum += i;
                    }
                    console.log('for求和: '+_sum);
                    console.timeEnd('for(var i = 0,len = aArr.length;i < len;i++)求和时间');
                    
                    console.time('for(var i = 0;i < aArr.length;i++)求和时间');
                    var _sum = 0;
                    for(var i = 0;i < aArr.length;i++){
                        _sum += i;
                    }
                    console.log('for求和: '+_sum);
                    console.timeEnd('for(var i = 0;i < aArr.length;i++)求和时间');
                    
                    
                    //while
                    console.time('while求和时间');
                    var _sum = 0,i = 0,_len = aArr.length;
                    while(i < _len){
                        _sum += aArr[i];
                        i++;
                    }
                    console.log('while求和: '+_sum);
                    console.timeEnd('while求和时间');
                    
                    //do while
                    console.time('do while求和时间');
                    var _sum = 0,i = 0,_len = aArr.length;
                    do{
                        _sum += aArr[i];
                        i++;
                    }while(i < _len)
                    console.log('do while求和: '+_sum);
                    console.timeEnd('do while求和时间');
                    
                    //forEach
                    var _sum = 0;
                    console.time('forEach求和时间');
                    aArr.forEach(function(item,index){
                        _sum += item;
                        return true;//every每个值都运行
                    })
                    console.log('forEach求和: '+_sum);
                    console.timeEnd('forEach求和时间');
                })()
                every求和: 4999950000
                every求和时间: 5.648193359375ms
                filter求和: 4999950000
                filter求和时间: 3.9560546875ms
                map求和: 4999950000
                map求和时间: 17.988037109375ms
                some求和: 4999950000
                some求和时间: 6.005126953125ms
                reduce求和: 4999950000
                reduce求和时间: 5.129150390625ms
                reduceRight求和: 4999950000
                reduceRight求和时间: 4.081787109375ms
                eval求和: 4999950000
                eval求和时间: 43.47314453125ms
    for求和:
    4999950000 for(var i = 0,len = aArr.length;i < len;i++)求和时间: 2.748046875ms
    for求和:
    4999950000 for(var i = 0;i < aArr.length;i++)求和时间: 5.08984375ms
    while求和:
    4999950000 while求和时间: 4.9140625ms do while求和: 4999950000 do while求和时间: 4.52392578125ms forEach求和: 4999950000 forEach求和时间: 4.5830078125ms

    效率最快的也就是我们用的较多的for循环(红字),但是如果不注意for的优化写法,就会导致for性能的极大降低

     

  • 相关阅读:
    PHP对URL传递的参数值进行编码和解码
    PHP 获取表单【2/2】
    PHP 获取表单【1/2】
    utf8 和 utf-8区别
    PHP 乘法口诀表
    PHP 插入和获取后台数据
    点击复制
    php网盘
    memcached-session-manager配置
    Apache Http Server与Tomcat6 的负载均衡(二)
  • 原文地址:https://www.cnblogs.com/faithZZZ/p/7063952.html
Copyright © 2011-2022 走看看