【若川视野 x 源码共读】第36期 | omit.js 剔除对象中的属性

447 阅读1分钟

1、omit.js的源码分析

1.1 omit.js用于删除对象中某个或某几个属性,返回值为删除属性后的对象
   (且不会改变数据简单的源对象)
function omit(obj, fields) {
  // eslint-disable-next-line prefer-object-spread
  // Object.assign--浅拷贝,第一层数据深拷贝,第二层嵌套数据为浅拷贝
  const shallowCopy = Object.assign({}, obj);
  for (let i = 0; i < fields.length; i += 1) {
    const key = fields[i];
    delete shallowCopy[key];
  }
  return shallowCopy;
}
1.2 测试数据

image.png

2、单元测试

2.1 单元测试代码

image.png

2.2 单元测试不通过的报错和纠正

image.png

3、package.json解析

{
  "name": "omit.js", // 包名
  "version": "2.0.2", // 版本号
  "description": "Utility function to create a shallow copy of an object which had dropped some fields.", // 描述
  "main": "lib/index.js", // 入口文件 如果没有找到或者没有设置默认会找目录下的index.js文件
  "module": "es/index.js", // ESM规范声明入口文件 一般会用于rollup webpack导出模块使用(优先的入口文件配置)
  "types": "index.d.ts", // ts类型声明入口文件
  "files": [ // 被项目包含的文件名数组
    "lib",
    "es",
    "dist",
    "index.d.ts"
  ],
  "scripts": {
    "start": "father doc dev --storybook", // 运行项目并生成文档视图
    "build": "father doc build --storybook",// 构建项目并生成文档视图
    "compile": "father build", // 构建项目
    "gh-pages": "father doc deploy", // 发布文档
    "prepublishOnly": "npm run compile && np --yolo --no-publish", // 编译并发布包
    "lint": "eslint .",
    "test": "father test", // 运行测试用例
    "coverage": "father test --coverage" // 测试覆盖率
  },
  "repository": { // git地址
    "type": "git",
    "url": "git+https://github.com/benjycui/omit.js.git"
  },
  "keywords": [ // 包的搜索关键词
    "object",
    "omit"
  ],
  "author": "Benjy Cui<benjytrys@gmail.com>", // 作者名字
  "license": "MIT", // 包遵循什么样的开源协议
  "bugs": { // bug 提交地址
    "url": "https://github.com/benjycui/omit.js/issues"
  },
  "homepage": "https://github.com/benjycui/omit.js#readme", // 项目包的官网 URL
  "devDependencies": { // 开发环境下项目所需依赖
    "@umijs/fabric": "^2.2.2",
    "assert": "^1.4.1",
    "eslint": "^7.4.0",
    "father": "^2.29.5",
    "np": "^6.3.1",
    "rc-tools": "^6.3.3"
  }
}

4、总结

4.1 第一次接触并去浅了解单元测试,知道了assert断言测试
4.2 重温vscode代码调试功能,并进行了代码的调试
4.3 搜索了解npm发布包的流程和package.json文件方法内容的解析
4.4 了解[umijs/father](https://github.com/umijs/father)打包工具和它的配置参数

5、感悟

我的学习一直间间断断的,看到优秀的小伙伴每天都在进步的时候,便想开始。
开始了,便想做好(查询文章中延伸出来的-我不知道或者不了解的知识点)。
做好了,这次学习就完成了。完成了,便会感觉充实。充实了,便会更快乐一下。每天都要开心一点噢(*^▽^*)