- 本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
- 这是源码共读的第36期,链接:Omit.js 剔除对象中的属性。
Omit.js 源码分析
- 仓库地址
- 源码路径 omit.js/src/index.js
- 功能介绍
var omit = require('omit.js');
omit({ name: 'Benjy', age: 18 }, [ 'name' ]); // => { age: 18 }
如上所示,通过第二个参数剔除,不需要的 key
- 源码分析
function omit(obj, fields) {
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;
- 通过 Object.assign 创建出一个浅拷贝的对象
- 循环 fields,删除拷贝对象中对应的 key
- 返回拷贝值
- 对比 lodash/omit
- lodash 考虑了 深拷贝的情况(fields 中是否有 数组的子项)
- lodash 考虑了边界情况,如 obj 是否为 null;fields 是否为一个类数组;fields 中是否有特殊的 key(proto)
- lodash 没有使用 es6 的方法,兼容性会更好些
npm 包所包含的内容
- /tests jest测试
- father
Library toolkit based on rollup, docz, storybook, jest, prettier and eslint. 包括了库的打包、输出文档、测试及格式化
- LICENSE 证书