Javascript 将已定义特性的子集从一个对象复制到另一个对象
我收到一个对象,它可以具有以下属性(例如): 我想将某些属性(例如,仅限状态和所有者)从该对象复制到另一个对象,但我只想在它们不是未定义或空的情况下复制它们(即,它们存在于原始对象上) 显然,我能做到:Javascript 将已定义特性的子集从一个对象复制到另一个对象,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,我收到一个对象,它可以具有以下属性(例如): 我想将某些属性(例如,仅限状态和所有者)从该对象复制到另一个对象,但我只想在它们不是未定义或空的情况下复制它们(即,它们存在于原始对象上) 显然,我能做到: let copy = {}; if(orig.status) copy['status'] = orig.status; if(orig.owner} copy['owner'] = orig.owner; 或者 但有没有更简洁、更简单的方法来做到这一点呢。这是一个简单的例子,在我
let copy = {};
if(orig.status) copy['status'] = orig.status;
if(orig.owner} copy['owner'] = orig.owner;
或者
但有没有更简洁、更简单的方法来做到这一点呢。这是一个简单的例子,在我的实际用例中,我需要复制大约10个属性
我用的是最新的打字稿
谢谢
Iain我创建了一个包含所有字段的数组,这些字段都应该被复制,并用foreach对其进行迭代。对于所有这些属性,我检查原始对象中的属性既不是未定义的,也不是空的。如果两者都不是,我将属性复制到结果数组
让obj={
“状态”:“待定”,
“所有者”:“UID”,
“createdOn”:“2020-08-12”,
“modifiedOn”:“2020-08-12”,
“空”:空
};
let fields=['status','owner','false','nullish'];
让copy={};
fields.forEach(字段=>{
如果(对象[字段]!==未定义和对象[字段]!==空)
复制[字段]=对象[字段];
});
控制台日志(副本)代码>是的,通过迭代对象键,我们可以在不引用“if”子句中的特定属性的情况下执行此操作:
此示例显示了用于删除空属性的搜索前后的对象:
让myObject={
“状态”:“待定”,
“所有者”:“UID”,
“blankAttribute”:空,
“createdOn”:“2020-08-12”,
“修改内容”:“2020-08-12”
}
log(“在空修剪之前:”,myObject);
key(myObject).forEach(key=>{
if(myObject[键]==null){
删除myObject[键]
}
});
log(“空修剪后:”,myObject)如果您只想检查“notundefined或null”而不是“falsy”,那么应该使用而不是。
let copy = {};
if(orig.status) copy['status'] = orig.status;
if(orig.owner} copy['owner'] = orig.owner;
let copy = {};
orig.status && copy.status = orig.status;
orig.owner && copy.owner = orig.owner;