API:
omit(obj: Object, fields: string[]): Object
返回一个被剔除属性的深拷贝对象。
它的API就是很简单,只有一个omit
方法,参数是目标对象和剔除属性的集合。
用法
- 首先安装一下依赖
npm i --save omit.js
npm i -S omit.js
- 使用
var omit = require('omit.js');
omit({ name: 'Benjy', age: 18 }, [ 'name' ]); // => { age: 18 }
源码
function omit(obj, fields) {// eslint-disable-next-line prefer-object-spreadconst shallowCopy = Object.assign({}, obj);for (let i = 0; i < fields.length; i += 1) {const key = fields[i];delete shallowCopy[key];}return shallowCopy;
}
export default omit;
一共11行代码。 首先使用了Object.assign
做了一次深拷贝,然后遍历对象要剔除的fields
数组,在循环中获取fields
的元素,通过delete
将深拷贝的对象属性依次删除,最后返回该对象。
这里深拷贝为了在将来使用该对象时不会影响原来的对象。
测试用例
我们有看到测试用例在这个路径/tests/index.test.js
import assert from 'assert';
import omit from '../src';
describe('omit', () => {it('should create a shallow copy', () => {const benjy = { name: 'Benjy' };const copy = omit(benjy, []);assert.deepEqual(copy, benjy);assert.notEqual(copy, benjy);});it('should drop fields which are passed in', () => {const benjy = { name: 'Benjy', age: 18 };assert.deepEqual(omit(benjy, ['age']), { name: 'Benjy' });assert.deepEqual(omit(benjy, ['name', 'age']), {});});
});
第一个测试:深拷贝的对象和原始对象对比 第二个测试:深拷贝的对象剔除属性后的结果是否正确
我们发现一般测试都用的是jest
,而它用的是father
。从npmjs
官网了解到, father
是一款 NPM
包研发工具,能够帮助开发者更高效、高质量地研发 NPM
包、生成构建产物、再完成发布。
然后我们将目光移动到package.json
文件上,发现其中的依赖还不少,father
,np
,还有其他一些eslint
依赖。其中father
,np
在我们发布npm
包提供了特别优秀的功能。
结束语:
剔除对象属性omit.js就到这里了~
最后
最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。
有需要的小伙伴,可以点击下方卡片领取,无偿分享