omit.js源码学习

382 阅读1分钟
准备

omit.js 提供了删除对象属性的方法,它的作用和 delete差不多,不同的是它通过函数返回了一个新对象,不会对原对象进行操作,它没有副作用

https://github.com/benjycui/omit.js

omit.js的实现

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;

//使用 const newObj = omit(targetObj,[keyName1,keyName2,..])
复制代码
  1. 函数内部创建一个局部变量shallowCopy 通过Object.assign复制了obj创建一个新对象
  2. fields传入一个对象属性名数组,通过循环遍历将shallowCopy上对应数组的属性挨个删除
  3. 最后返回这个新对象

代码是浅拷贝实现,如果是复杂的嵌套对象则不起作用,同时这里也牵扯到了纯函数。纯函数是指不依赖于且不改变它作用域之外的变量状态的函数,也就是消除副作用,不对原来的对象产生任何影响。