lodash:深层复制对象,但不是所有属性

时间:2016-04-13 16:29:54

标签: 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,3],
    c: {
        z: 'surname',
        x: []
    }
};

编辑: 我终于选择了:

var blacklist = ['a','d'];
_.cloneDeep(_.omit(obj, blacklist));

5 个答案:

答案 0 :(得分:15)

omit几乎完全符合这个目的:

_.cloneDeep(_.omit(obj, blacklist));

在这里小提琴:https://jsfiddle.net/c639m9L2/

答案 1 :(得分:4)

您可以使用pick功能:

_.pick(obj, 'b', 'c')

答案 2 :(得分:2)

您可以使用JSON.stringify的第二个参数来执行此操作。

JSON.parse(JSON.stringify(obj, ['b', 'c']))

答案 3 :(得分:0)

您可以结合使用分配选择

Object.assign(copy_obj, _.pick(obj, ['b', 'c']));

这样,如果 copy_obj 有其他属性,则不要覆盖它们。

答案 4 :(得分:-1)

var blacklist = ['a','d'];
_.cloneDeep(_.omit(obj, blacklist));