JavaScript实用库:Lodash源码数学函数解析(一)add、createMathOperation、divide、multiply、subtract

休息了一段时间,又要开始重整旗鼓继续学习了


本章的内容主要是:add、createMathOperation、divide、multiply、subtract


在这里插入图片描述

Lodash是一个非常好用方便的JavaScript的工具库,使得我们对数据处理能够更加得心应手

接下来我要对Lodash的源码进行剖析学习
每天几个小方法,跟着我一起来学lodash吧


1、_.add(augend, addend)

该方法的功能是将两个数相加,看清楚只有两个数相加,并不能两个以上的数相加

我们来看官方的例子:

只有一个例子,输出结果就是两个数之和

接下来我们看该方法的源码:

var add = createMathOperation(function(augend, addend) {
  return augend + addend;
}, 0);

module.exports = add;

这里其实没什么好难的,但是如果用书面的语言来解释这个函数的功能还是有点吃力的,在数组方法的源码的解释过程我就发现了这个问题,但是我还是努力将这些方法解释清楚吧

该方法只要依靠createMathOperation函数进行的,所以为了了解add函数的实现过程不可避免的要去了解它的依赖函数


2、createMathOperation

这些依赖函数大多都是没有文档的解释的,我们接着上面的add函数来说,下面直接上createMathOperation的源码:

/*第一个参数就是我们add函数里的function函数,第二个参数是add函数里的第二参数0 */
function createMathOperation(operator, defaultValue) {
  /*value和other分别是两个数*/
  return function(value, other) {
  
    /*定义一个结果变量*/
    var result;

    /*对两个传入的值进行判断处理,如果两个值都为未定义,则输出我们的defaultValue,也就是0*/
    if (value === undefined && other === undefined) {
      return defaultValue;
    }
    /*通过第一轮判断后还有情况就是只有其中一个值是未定义,那么接下来的判断都是针对这种情况,如果第一个值不是未定义,则结果等于第一个值,下面一个判断也是一样*/
    if (value !== undefined) {
      result = value;
    }

    if (other !== undefined) {
      if (result === undefined) {
        return other;
      }
      /*如果数据类型是字符串类型,则对数据进行转换成整数*/
      if (typeof value == 'string' || typeof other == 'string') {
        value = baseToString(value);
        other = baseToString(other);
      } else {
        value = baseToNumber(value);
        other = baseToNumber(other);
      }

	  //如果两个值都不是未定义,则可以进行第一个参数函数的输出结果value + other
      result = operator(value, other);
    }
    /*最后输出结果*/
    return result;
  };
}

module.exports = createMathOperation;

看过这个依赖函数你就会发现,这就是对数据的一个判断处理的过程,因为你也不知道用户会输出什么,所以需要很多步的判断处理的过程。


3、_.divide(dividend, divisor)

该方法就是两数相除,我觉得该方法会使用到我们第一个函数的依赖函数

我们来看例子:

可以看到,结果就是 6 / 4 = 1.5

我们接下来看源码:

var divide = createMathOperation(function(dividend, divisor) {
  return dividend / divisor;
}, 1);

module.exports = divide;

果然没错,也用到了createMathOperation这个函数,具体过程去看第二项createMathOperation函数的讲解


4、_.multiply(multiplier, multiplicand)

这个方法也和上面的方法一样,只不过它是两数相乘

我们来看例子和源码:

var multiply = createMathOperation(function(multiplier, multiplicand) {
  return multiplier * multiplicand;
}, 1);

module.exports = multiply;

和上面几种方法也是大同小异了


5、_.subtract(minuend, subtrahend)

最后就是我们两数相减了

不多说直接看例子和源码:

var subtract = createMathOperation(function(minuend, subtrahend) {
  return minuend - subtrahend;
}, 0);

module.exports = subtract;

过程都差不多,也就不过多解释了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弓长于水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值