例如,我有一个像这样的对象:
obj1 = {
name: 'Bob',
age: 20,
career: 'teacher'
}
现在我需要复制部分属性而不是所有属性。
obj2 = {
name: '',
age: '',
}
我知道我可以像obj2.name = obj1.name
那样做,如果需要复制许多属性,这将是冗长的。还有其他快速方法可以解决这个问题吗?
我试过了
let {name: obj2.name, age: obj2.age} = obj1;
但得到了错误。
答案 0 :(得分:5)
实际上你不需要对象解构,只需要简单的赋值:
obj2 = { name: obj1.name, age: obj1.age }
现在,obj2
拥有所需的属性:
console.log(obj2);
// Prints {name: "Bob", age: 20}
如果要将obj2
的旧属性与新属性合并,可以执行以下操作:
obj2 = { ...obj2, name: obj1.name, age: obj1.age }
答案 1 :(得分:1)
删除let
(您未声明变量)和surround with parentheses:
({name: obj2.name, age: obj2.age} = obj1);
答案 2 :(得分:0)
我猜您可以使用ES6对象解析语法
var obj = { name: 'kailash', age: 25, des: 'backenddev'}
({name} = obj);
答案 3 :(得分:0)
您可以将目标对象用作属性的模板,并使用目标对象的默认值指定obj1
的值。
var obj1 = { name: 'Bob', age: 20, career: 'teacher' },
obj2 = { name: '', age: '' };
Object.keys(obj2).forEach(k => obj2[k] = obj1[k] || obj2[k]);
console.log(obj2);
答案 4 :(得分:0)
另一个解决方案是为此编写可重用的方法。您可以提供要复制的对象和方法。
const duplicatePropertiesFromObject = (obj, propertyNames = [], newObj = {}) => {
Object.keys(obj).forEach((key) => {
if (propertyNames.includes(key)) {
newObj[key] = obj[key];
}
});
return newObj;
}