源码共读02 omit.js

71 阅读1分钟

项目源码地址:github

omit.js功能: 删除对象中指定的属性或方法

核心源码:

function omit(obj, fields) {
  // eslint-disable-next-line prefer-object-spread
  const shallowCopy = Object.assign({}, obj);
  for (let i = 0; i < fields.length; i += 1) {
    const key = fields[i];
    delete shallowCopy[key];
  }
  return shallowCopy;
}

知识点:

使用Object.assign浅拷贝源对象到一个新对象,在新对象执行删除操作,不影响源对象

测试模块代码

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']), {});
  });
});

使用assert断言模块,测试代码运行效果

deepEqual:深度遍历,判断是否相等

notEqual:直接判断不相等,相当于!=

describe,it测试语法的使用

延伸:

用assert.notStrictEqual判断严格不相等,相当于!==