omit.js 源码解读

110 阅读1分钟

目录

文件名作用
/src/index.jsomit方法的函数实现
/tests/index.test.jsomit方法的测试用例

方法解读

创建一个对象(可选择性放弃一些字段)的浅层拷贝的实用函数。

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():判断是实际值与期望值是否深度相等(对象或数组的元素是否相等)