每日lodash源码阅读(一)——createMathOperation

2023-05-16

每日lodash源码阅读(一)——createMathOperation

  • 一、写在前面
  • 二、使用举例
  • 三、源码分析
      • add.js
      • createMathOperation.js

一、写在前面

createMathOperation是lodash的数学操作内置函数,add、divide等方法均是通过createMathOperation 创建出来的,阅读createMathOperation 可以掌握lodash的adddivide等方法。

二、使用举例

_.add(6, 4)

三、源码分析

add.js

import createMathOperation from './.internal/createMathOperation.js'

const add = createMathOperation((augend, addend) => augend + addend, 0)

export default add

可以看到,add方法很简单,就是调用createMathOperation方法,把结果赋值给add。
实际上,createMathOperation是一个高阶函数,接受一个函数作为参数,返回另一个函数。

createMathOperation.js

import baseToNumber from './baseToNumber.js'
import baseToString from './baseToString.js'

function createMathOperation(operator, defaultValue) {
  return (value, other) => {
  	// 调用add等函数,不传参,返回defaultValue(add等函数固定传入的defaultValue,比如上文中add传入的defaultValue是0)
    if (value === undefined && other === undefined) {
      return defaultValue
    }
    // 调用add等函数,只传一个合法参数,则把这个合法参数返回
    if (value !== undefined && other === undefined) {
      return value
    }
    if (other !== undefined && value === undefined) {
      return other
    }
    // 如果传入的参数含有字符串,则把两个参数都转换成string类型,add(1, '1') => '11'
    if (typeof value === 'string' || typeof other === 'string') {
      value = baseToString(value)
      other = baseToString(other)
    }
    else {// 否则都转换成number类型
      value = baseToNumber(value)
      other = baseToNumber(other)
    }
    // 将转换好的参数传入调用createMathOperation函数时传入的operator函数
    return operator(value, other)
  }
}

export default createMathOperation

createMathOperation返回了一个箭头函数,做了很多类型判断,最终执行add等方法传入的operator函数。
createMathOperation作为一个高阶函数,主要作用就是增加了参数校验功能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每日lodash源码阅读(一)——createMathOperation 的相关文章

随机推荐

  • Qt-设置背景色的几种方式

    最近设置背景色 xff0c 被背景色搞得晕头转向 xff0c 然后总结了一下用过的方法与踩过的坑 xff0c 希望大家有所帮助 QLabel label 61 new QLabel CSS样式 xff0c 直接设置样式 xff0c 该方法对
  • C++ 如何获取数组/容器的长度?

    文章目录 一 获取数组的长度1 sizeof a sizeof a 2 end a begin a 二 获取标准库容器的长度三 数组作为函数参数时 xff0c 在函数中无法获取其长度 一 获取数组的长度 1 sizeof a sizeof
  • 计算机网络期末复习题

    1 请简述在划分子网的情况下 xff0c 路由器转发IP数据报的基本过程 答 xff1a 在划分子网的情况下 xff0c 路由器转发分组的算法如下 xff1a 1 从收到的数据报首部提取目的IP地址D xff08 1分 xff09 2 先判
  • Jetson TX1 TX2 IO 引脚设置

    有朋友问我引脚问题 xff0c 我就把一段文档摘抄在这里了 希望对大家有用 配置40引脚扩展接头 主屏幕 兼容的硬件屏幕 40引脚扩展标题屏幕 命令行界面 设备树覆盖 创建简单的设备树覆盖 为40针接头连接器创建自定义设备树覆盖 启动Jet
  • Android手机怎样投屏到win10(无需联网)

    一 前言 适用场景 xff1a 无可用wifi 想获得大屏观影体验 x1f601 二 具体操作 PC端 在Cortana处搜索 投影设置 投影到此电脑 处的设置如下如图 xff08 也可根据自己习惯调整 xff09 安卓端 华为手机为例 打
  • Windows远程控制ubuntu16.04的vnc教程(附灰屏和无鼠标只显示叉号的解决方案)

    VNC可远程Linux的桌面 xff0c 不仅仅只可以远程终端窗口 xff0c 操作起来要比ssh好用 xff0c 效果如图 VNC介绍 xff1a VNC Virtual Network Console xff0c 即虚拟网络控制台 xf
  • 联邦学习安全与隐私保护

    一 FL隐私保护方法 1 1 加密方法 通过将明文编码为密文的方式 xff0c 只允许特定人员解码 xff0c 为数据隐私保护提供了有效手段 xff0c 但往往需要较大的计算开销 xff0c 较难应用于实际场景中 安全多方计算 SMC研究的
  • vue - vue项目对axios请求的封装

    axios介绍 axios是基于promise的网络请求库 xff0c 可以在nodejs和浏览器中运行 在服务端axios使用原生的nodejs的http模块 xff0c 在客户端浏览器中则而是用xmlhttprequests xff0c
  • C++总结——语法篇

    Static关键字1 静态全局变量2 静态局部变量3 静态函数4 静态数据成员5 静态成员函数 引用引用与指针的区别 左值 右值 左值引用 右值引用 new delete与malloc free Static关键字 1 静态全局变量 sta
  • Android开发快速入门及导出apk

    环境及工具准备 jdk安装配置安装android studio或idea xff08 推荐直接使用idea xff0c android studio其实也是基于idea开发的 xff09 配置android sdk安装一个安卓模拟器 xff
  • 在阿里云搭建CENTOS7系统以及图形界面

    1 搭建CentOS7操作系统服务器 首先要购买服务器 xff0c 推荐学生认证可以获得好几个月的免费服务器 略去具体的过程 阿里云默认的系统不是CentOS7 xff0c 所以需要先将操作系统改成CentOS7 在实例的基本信息中 xff
  • linux基础学习,有相应的笔记文件XMind和Word(基于centos8(主要的)和Ubuntu20),里面有linux基本操作指令和JavaEE,大数据相关的shell。2021年4月26日

    前面的话 这篇文章是我学习linux的一个记录 xff0c 我是用XMind记笔记的 xff0c 然后转换为Word最后粘贴到这里的 xff0c 如果感兴趣的话 xff0c 可以下载我上传的文件 xff0c 都是免费的 xff0c 大家共同
  • MapReduce的详细使用

    MapReduce 文章目录 MapReduce1 常用数据序列化类型2 编程规范 xff08 三个阶段 xff09 Mapper阶段Reducer阶段Driver阶段 3 编程环境准备4 简单案例 单词统计 5 序列化序列化概述自定义 b
  • STM32-串口通信详解

    目录 前言 一 通信接口背景知识 1 并行通信和串行通信 2 串行通信的分类 二 STM32的串口通信基础 1 串口通信接口 2 串口通信框图 3 串口通信相关寄存器 4 波特率计算方法 三 库函数配置 1 串口配置一般步骤 总结 前言 众
  • 【SDN控制器分析之一】ONOS架构概述

    ONOS 设计目标 ONOS是一个采用OSGI技术来管理子项目的SDN控制器开源项目 xff0c 在最初设计时有这么几个目标是明确的 xff1a 代码模块化 xff1a 支持把新的功能作为新的独立单元引入特性可配置 xff1a 无论是在启动
  • 如何让matlab形成多图共用颜色条?

    需求 xff1a 使用matlab命令tile layout功能 xff0c 从文件中读取名称不同的8组图片 xff0c 每组包含5个具有递增编号的图片 xff0c 实现的效果是 xff0c 返回一张8x5的大图 xff0c 也就是8行5列
  • js中为什么基本数据类型能调用对象方法

    在js中数据类型被分为两大类 基本数据类型引用数据类型 引用数据类型可以使用原型对象中内置的实例方法 为了更方便开发人员操作基本数据类型 xff0c 在基本数据类型中也有内置的方法 这些方法放在es三个特殊引用类型 xff08 基本包装类型
  • docker基本管理一:镜像管理

    本章主要介绍docker 镜像的查找 下载 列出 删除以及创建等 镜像是什么 xff1f 在docker中 xff0c 镜像是容器的模板 容器中的虚拟机都是以镜像为模板创建的 docker 为镜像的创建和更新提供了简单的机制 xff0c 用
  • ST-Link的红灯一直异常闪烁

    ST Link的红色指示灯一直异常闪烁 xff0c 并且keil识别不到芯片 解决办法 xff0c 将HUB拔掉 xff0c 直连PC机 xff0c 排查发现是延长线只有充电 xff0c 没有数据传输DP DN
  • 每日lodash源码阅读(一)——createMathOperation

    每日lodash源码阅读 xff08 一 xff09 createMathOperation 一 写在前面二 使用举例三 源码分析add jscreateMathOperation js 一 写在前面 createMathOperation