Javascript lodash:深度复制对象,但不是所有属性
是否有任何方法可以复制具有lodash的对象,但不能复制所有属性。 我知道的唯一方法是逐个属性手动复制它 通缉犯,例如:Javascript lodash:深度复制对象,但不是所有属性,javascript,lodash,Javascript,Lodash,是否有任何方法可以复制具有lodash的对象,但不能复制所有属性。 我知道的唯一方法是逐个属性手动复制它 通缉犯,例如: var obj = { a: 'name', b: [1,2,3], c: { z: 'surname', x: [] }, d: { y: 'surname2', w: [] } }; 结果可能是这样的 var copy_obj = { b: [1,2,
var obj = {
a: 'name',
b: [1,2,3],
c: {
z: 'surname',
x: []
},
d: {
y: 'surname2',
w: []
}
};
结果可能是这样的
var copy_obj = {
b: [1,2,3],
c: {
z: 'surname',
x: []
}
};
编辑:
我最终选择了:
var blacklist = ['a','d'];
_.cloneDeep(_.omit(obj, blacklist));
您可以使用以下功能:
_.pick(obj, 'b', 'c')
您可以使用第二个参数
JSON.stringify
来执行此操作
JSON.parse(JSON.stringify(obj, ['b', 'c']))
省略
几乎就是为了这个目的:
_.cloneDeep(_.omit(obj, blacklist));
在这里拉小提琴:您可以结合使用分配和拾取
Object.assign(copy_obj, _.pick(obj, ['b', 'c']));
这样,如果copy\u obj有其他属性,您就不会覆盖它们。查看
选择并忽略。如果您自己解决了问题,请将其作为答案,而不是对问题的编辑。如果你愿意,你可以接受这个答案。假设OP想要一份深度副本,正如问题标题所建议的那样,这是不行的。你为什么逐字逐句地复制我的答案并将其标记为正确?@Chris:公平地说,是从4月14日开始的,而OP已经在4月13日编写了这段代码,在可能将这个片段复制到一个新的答案(如所建议的)之前。公平,只是看起来很奇怪。我很好奇,他在回答中是否发现了一些更正确的东西——对于这个问题/答案的未来读者来说,这不是我最喜欢的,但由于使用了香草JS,而其他答案都需要lodash。这是一个公平的观点,说明了如何保存copy\u obj
中的道具。然而,这仅仅是来自obj
的道具的一个浅显副本。如果您需要它们的深度副本,您还需要使用.deepClone
。也就是说,Object.assign(复制对象,[u.obj,[u.deepClone([u.pick(对象,[b',[c]))))代码>Lodash文档中的注释:“此方法[即,\uu.omit
]比\uu.pick
]慢得多。是否有人可以将此添加到u.clonedeep…,var blacklist=['a','d'];这是非常重要的一行,队列编辑请求已满
Object.assign(copy_obj, _.pick(obj, ['b', 'c']));