JavaScript手写源码之omit函数的实现
最近突然有个新的想法,想去看看前端的小库来提升自己的编码能力。但是又不知道怎么去证明自己是否真的看懂了,那就实现一个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函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341