簡單的add函數的N種寫法


最近在學習es6,看到for-of這里,就想自己寫着練習一下,於是就准備寫一個小函數add來求和。函數很簡單,如add(1,2,3)這樣。於是我開始着手

一開始我是這么寫的

        function add(){
            var result=0;
            for (var i = 0; i < arguments.length; i++) {
                result+=arguments[i]
            }
            return result
        }

啪啪啪馬上就寫好了,最基本的方法,不過好像太簡單了,着手升級一下。

用數組的方法寫一下

        function add(){
            var result=0;
            arguments.forEach(function(item){
                result+=item
            })
            return result   
        }
提示報錯:Uncaught TypeError: arguments.forEach is not a function
不可能,我明明都能打印出他的length出來
我肯定是遇到了一個假數組
確實,arguments看起來是個數組,但是並不是一個真正的數組。
打開chrome控制台,可以發現他跟真正的數組的區別;

對比兩者的原型可以發現,arguments的原型指向的是object,而數組指向的是array

這讓我想起一個笑話:

剛剛從大學本科畢業的小明決定買房,雖然他只有3000的月薪,但是他花了一年就做到了。一年后他那着存的3萬元和他父親給他的297萬,終於買了房和車。

沒辦法人家是親生的,[ ]雖然自己沒有forEach方法,但是他父親Array有啊,需要的時候直接就拿過來了。但是arguments指向的是object,他父親也沒錢給他買房,那怎么辦,只好到處借了。

先像七大姑借了forEach過來

        function add(){
            var result=0;
            Array.prototype.forEach.call(arguments,(i)=>{
                result+=i;
            })
            return result   
        }

好像還不夠,又像八大姨借了reduce過來

        function add(){
            return Array.prototype.reduce.call(arguments,(pre,next)=>{
                return pre+next
            })  
        }

雖然籌夠錢買房了,但是思來思去,總是借錢了不好,於是發奮塗牆,期望不用借錢也能自己買房

1.Array.from:將一個 ArrayLike 對象或者 Iterable 對象轉換成一個 Array。

        function add(){
            var arr=Array.from(arguments);
            return arr.reduce(arguments,(pre,next)=>{
                return pre+next
            })  
        }

2.展開運算符

        function(...arg){  
            return arg.reduce((pre,next)=>{
                return pre+next
        })      
    }

3.當然最簡單的for of

         function(){         
            var result=0;
            for(const i of arguments){
                result+=i
            };
            return result   
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM