复制除某些字段之外的对象

问题描述 投票:0回答:3

我有两个接口:

public interface ObjectOne {
   field1: string;
   field2: string;
   field3: string;
   field4: string;
   field5: string;
   ...
}

public interface ObjectTwo {   
   field2: string;
   field5: string;
   field8: string;
   ...
}

让我们想象一下

ObjectOne
有 20 个字段,
ObjectTwo
有 10 个字段(都是
ObjectOne
的一部分)。

在操作的最后,我想将

ObjectOne
的字段分配给
ObjectTwo
(或复制它们),避免将每个字段映射为:

objTwo.field2 = objOne.field2;
objTwo.field5 = objOne.field5;
objTwo.field8 = objOne.field8;
...

我知道我可以将

ObjectOne
解构为:

const {field2, field5, field8, fieldX, ...} = objOne;

然后将所有这些字段分配给

objTwo
,如下所示:

objTwo = {field5, field8, fieldX, ...};

但我希望这里存在一个更好的解决方案(作为

spread operator
的逆)。扩展运算符示例:

const objOne = {...objTwo, field1, field3, field4, field6, ...};

如果我对 objTwo 使用扩展运算符,这将继承所有 objOne 字段,即使我声明了对象类型。

javascript typescript copy javascript-objects spread-syntax
3个回答
0
投票

您可以使用展开运算符,您可以像我的示例中那样使用不需要的运算符

one
。这是一个例子。

const copyFrom = { one: 'one', two: 'two', three: 'three' }
const { one, ...rest } = copyFrom

const copyTo = { ...rest } // or just copyTo = rest


0
投票
Object.keys(ObjectTwo).forEach(key=>ObjectTwo[key]=ObjectOne[key]);

0
投票

我能得到的最接近你需要的是这个

one = {
   field1: "field1",
   field2: "field2",
   field3: "field3",
   field4: "field4",
   field5: "field5"
};

two = {   
   field2: "field2x",
   field5: "field5x",
   field8: "field8x"
};

Object.keys(two).forEach(function(x) { if (typeof one[x] !== "undefined") two[x] = one[x];});

// two is now:
// {field2: "field2", field5: "field5", field8: "field8x"}

这并不理想,但它只会将定义的值从一个对象复制到另一个对象

© www.soinside.com 2019 - 2024. All rights reserved.