js 數組求和,多種方法,並比較性能

能夠借用下面12種方法對數組求和,建立一個長度爲10w的數組,進行測試javascript

  • every()       檢測數值元素的每一個元素是否都符合條件。 
  • filter()      檢測數值元素,並返回符合條件全部元素的數組。 
  • map()        經過指定函數處理數組的每一個元素,並返回處理後的數組。 
  • some()       用於檢測數組中的元素是否知足指定條件(函數提供)。 
  • reduce()       數組中的每一個值(從左到右)開始合併,最終爲一個值 
  • reduceRight()    數組中的每一個值(從右到左)開始合併,最終爲一個值 
  • eval()         計算 JavaScript 字符串,並把它做爲腳本代碼來執行。 
  • for            循環代碼塊必定的次數 
  • while         當指定的條件爲 true 時循環指定的代碼塊 
  • do/while       一樣當指定的條件爲 true 時循環指定的代碼塊 
  • for in         循環遍歷對象的屬性 
  • forEach      調用數組中的每一個元素。    

 

  具體實現:html

    首先建立一個龐大的數組:java

    var aArr = [];數組

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

     aArr.push(i);oop

      }性能

  

(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性能的極大下降測試

相關文章
相關標籤/搜索