iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript手写源码之omit函数的实现
  • 557
分享到

JavaScript手写源码之omit函数的实现

JavaScript实现omit函数JavaScriptomit函数JavaScriptomit 2023-02-09 12:02:27 557人浏览 独家记忆
摘要

目录添加测试文件实现omit函数最近突然有个新的想法,想去看看前端的小库来提升自己的编码能力。但是又不知道怎么去证明自己是否真的看懂了,那就实现一个mini的吧。 添加测试文件 我们

最近突然有个新的想法,想去看看前端的小库来提升自己的编码能力。但是又不知道怎么去证明自己是否真的看懂了,那就实现一个mini的吧。

添加测试文件

我们通过vitest来实现测试的功能。

pnpm add -D vitest

然后再package.JSON文件中添加我们的执行脚本

 "scripts": {
    "test": "vitest"
  }

接着我们就可以编写测试文件了

import { describe, expect, test } from "vitest"
import { myOmit } from "."

describe("omit", () => {
  test("should create a shallow copy", () => {
    const mick = { name: "mick" }
    const copy = myOmit(mick, [])
    expect(copy).toEqual({ name: "mick" })
  })

  test("should drop fields which are passed in ", () => {
    const mick = { name: "mick", age: 18 }

    const copy = myOmit(mick, ["age"])

    expect(copy).toEqual({ name: "mick" })
    expect(mick).toEqual({ name: "mick", age: 18 })
    expect(myOmit(mick, ["name", "age"])).toEqual({})
  })
})

实现omit函数

我们要做的肯定是是要将测试文件通过。如果测试通过了,那就说明我们的功能基本上是已经实现了,剩下的是代码重构了。

根据测试文件我们可以看到,提出对象中的属性生成一个新的对象,但是原对象是不发生改变的。那可以用Object.assign,下面介绍一个Object.assign

Object.assign() 方法将所有可枚举(Object.propertyIsEnumerable() 返回 true)和自有(Object.hasOwnProperty() 返回 true)属性从一个或多个源对象复制到目标对象,返回修改后的对象。

我们首先利用Object.assign将原对象复制一份,然后遍历复制过后的对象将需要剔除的属性删除即可。

export function myOmit(value, args) {
  const shallowCopy = Object.assign({}, value)

  for (let i = 0; i < args.length; i++) {
    const key = args[i]
    if (key in shallowCopy) {
      delete shallowCopy[key]
    }
  }

  return shallowCopy
}

执行测试文件

到此这篇关于javascript手写源码之omit函数的实现的文章就介绍到这了,更多相关JavaScript omit函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript手写源码之omit函数的实现

本文链接: https://www.lsjlt.com/news/195320.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作