如何解决复制对象,某些字段除外
我有两个接口:
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,...};
但我希望这里存在一个更好的解决方案(作为 spread operator
的倒数)。展开运算符示例:
const objOne = {...objTwo,field1,field3,field4,field6,...};
如果我对 objTwo 使用扩展运算符,这将继承所有 objOne 字段,即使我声明了对象类型。
解决方法
您可以使用扩展运算符,在我的示例中使用不需要的运算符 one
。这是一个例子。
const copyFrom = { one: 'one',two: 'two',three: 'three' }
const { one,...rest } = copyFrom
const copyTo = { ...rest } // or just copyTo = rest
,
Object.keys(ObjectTwo).forEach(key=>ObjectTwo[key]=ObjectOne[key]);
,
最接近你需要的是这个
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"}
这并不理想,但它只会将定义的值从一个 obj 复制到另一个
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。