zoukankan      html  css  js  c++  java
  • 简单的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   
            }
    
  • 相关阅读:
    汇总常用的jQuery操作Table tr td方法
    Windows消息目录
    DataGridView基本操作
    PCL,VTK及其依赖库的编译-十分详细
    Session 的生命周期
    TCP协议的问题
    projecteuler----&gt;problem=12----Highly divisible triangular number
    阿里电话面试问题----100万个URL怎样找到出现频率最高的前100个?
    hbase 增删改查 api 简单操作
    为什么要在css文件里定义 ul{margin:0;padding:0;}这个选择器?
  • 原文地址:https://www.cnblogs.com/zhengrunlin/p/6583233.html
Copyright © 2011-2022 走看看