【若川视野 x 源码共读】第36期 | 可能是历史上最简单的一期 omit.js 剔除对象中的属性

40 阅读1分钟

源代码

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;
}

export default omit;

单元测试

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

注意:father 新一代的包管理文件

export default {
  entry: ['src/index.js'],
  cjs: 'babel',
  esm: { type: 'babel', importLibToEs: true },
  doc: { base: '/switch' },
  preCommit: {
    eslint: true,
    prettier: true,
  },
};