如何从对象中破坏部分属性

时间:2017-09-04 09:19:44

标签: javascript ecmascript-6

例如,我有一个像这样的对象:

obj1 = {
     name: 'Bob',
     age:  20,
     career: 'teacher'
  }

现在我需要复制部分属性而不是所有属性。

obj2 = {
     name: '',
     age: '',
  }

我知道我可以像obj2.name = obj1.name那样做,如果需要复制许多属性,这将是冗长的。还有其他快速方法可以解决这个问题吗? 我试过了

let {name: obj2.name, age: obj2.age} = obj1;

但得到了错误。

5 个答案:

答案 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;
}