准备
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,..])
复制代码
- 函数内部创建一个局部变量shallowCopy 通过Object.assign复制了obj创建一个新对象
- fields传入一个对象属性名数组,通过循环遍历将shallowCopy上对应数组的属性挨个删除
- 最后返回这个新对象
代码是浅拷贝实现,如果是复杂的嵌套对象则不起作用,同时这里也牵扯到了纯函数。纯函数是指不依赖于且不改变它作用域之外的变量状态的函数,也就是消除副作用,不对原来的对象产生任何影响。