- 本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
- 这是源码共读的第36期,链接:juejin.cn/post/711878…
- 仓库地址:github.com/benjycui/om…
目录
文件名 | 作用 |
---|---|
/src/index.js | omit方法的函数实现 |
/tests/index.test.js | omit方法的测试用例 |
方法解读
创建一个对象(可选择性放弃一些字段)的浅层拷贝的实用函数。
function omit(obj, fields) {
// eslint-disable-next-line prefer-object-spread
// 将obj作为源对象,把所有的可枚举的自有属性复制目标对象{},返回复制后的对象
const shallowCopy = Object.assign({}, obj);
// 遍历fields数组,将其中的键名为key的属性从对象中删除,改变源对象
for (let i = 0; i < fields.length; i += 1) {
const key = fields[i];
delete shallowCopy[key];
}
return shallowCopy;// 返回操作后的对象
}
export default omit;
Object.assign()方法的使用可以参考:
测试用例解读
import assert from 'assert';
import omit from '../src';
// 关键字describe:规定一组测试
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']), {});// 元素相等
});
});
- notEqual():判断实际值与期望值是否不相等
- deepEqual():判断是实际值与期望值是否深度相等(对象或数组的元素是否相等)