• 简单的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   
            }
    
  • 相关阅读:
    MVC常用跳转页面的方法
    简单工厂模式
    MySQL 查询昨天中午12点到今天中午12点的数据
    Windows安装yarn
    MapStruct
    CSS 3D
    05-序列化器ModelSerializer
    django基础之Django中间件
    04-序列化器Serializer
    03-四大基本模块
  • 原文地址:https://www.cnblogs.com/zhengrunlin/p/6583233.html
Copyright © 2020-2023  润新知