js如何复制或删除对象的部分属性?

对象属性的部分复制和部分删除,处理方法类似,下面以复制部分属性为例。

需求

数据复制功能,新的数据只需要源数据的部分属性。
以菜单数据为例,源数据为:

const src = {
  name: '菜单管理',
  url: '/menu',
  icon: 'ic-menu',
  color: '#ff0000',
  isHide: false,
  a: 1,
  b: 2,
  c: 3,
  d: 4,
};

整体思路

  1. 先复制所有字段,再删除不要的字段
  2. 直接复制需要的字段

两种使用场景

场景1:想要很少的字段

格式如:

const target = {
  name: '菜单管理',
  url: '/menu',
};

这种情况比较好处理,按思路2来最简单。

一般情况,直接给字段赋值就可以,如:

const target = {
  name: src.name,
  url: src.url,
};

如果觉得这种方法会写多次src.,可以换成下面这种:
使用箭头函数解构对象,立即执行返回新对象。

const target = (({ name, url }) => ({ name, url }))(src);

场景2:想要大部分字段

格式如:

const target = {
  name: '菜单管理',
  url: '/menu',
  icon: 'ic-menu',
  color: '#ff0000',
  isHide: false,
  a: 1,
  b: 2,
  c: 3,
};

这种情况可以采用思路1,如:

const target = { ...src }; // 复制所有字段
delete target.d; // 删除不用的

注意:复制时不要直接用 target=src ,这样删除target的属性时,src的属性也会被删除。

思路2可以吗?也可以!

这时候使用直接解构,得写很多属性,我们改用rest方式解构。

const { d, ...target } = src; // target 包含除了d之外所有的属性

这种方法,代码量更少,也更直观,但也有不好的地方,那就是多了d这个冗余变量,但瑕不掩瑜,还是推荐这种方法。

完毕。

你可能感兴趣的:(js如何复制或删除对象的部分属性?)