【发布时间】:2018-03-12 22:35:40
【问题描述】:
如果我有一个 JS 对象,并且我想创建一个新对象来复制所有属性,除了需要过滤掉的属性黑名单,那么最简单的方法是什么?
所以我会做类似的事情
originalObject.copyAndFilter('a', 'b')
这将获取原始对象,复制它,并确保属性 a 和 b 不在新对象中。
我正在通过 Babel 使用 ES2015/2016,所以如果它提供了一种更简单的方法也可以使用。
【问题讨论】:
-
浅拷贝还是深拷贝?过滤后的键是在任何地方(任何深度)还是仅在第一级?
-
在简单对象上进行深度复制的一种廉价而简单的方法是
var copy = JSON.parse(JSON.stringify(object))- 在 javascript Primitives 中,Date、Symbol和undefined不会简单地工作......这个只留下布尔值、数字和字符串可以使用这个“hack”——虽然,也有解决方法,但这更像是一个 hack -
youmightnotneedjquery.com/#deep_extend(或只是扩展),只需在函数签名中添加一个
filter参数(键名数组)并使用if (obj.hasOwnProperty(key) && filter.indexOf(key) < 0)?