Javascript 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,

是否有任何方法可以复制具有lodash的对象,但不能复制所有属性。 我知道的唯一方法是逐个属性手动复制它

通缉犯,例如:

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']));