对象属性的部分复制和部分删除,处理方法类似,下面以复制部分属性为例。
需求
数据复制功能,新的数据只需要源数据的部分属性。
以菜单数据为例,源数据为:
const src = {
name: '菜单管理',
url: '/menu',
icon: 'ic-menu',
color: '#ff0000',
isHide: false,
a: 1,
b: 2,
c: 3,
d: 4,
};
整体思路
- 先复制所有字段,再删除不要的字段
- 直接复制需要的字段
两种使用场景
场景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这个冗余变量,但瑕不掩瑜,还是推荐这种方法。
完毕。