是否可以在现有对象上分解结构?(Javascript ES6)

2022-08-30 01:57:13

例如,如果我有两个对象:

var foo = {
  x: "bar",
  y: "baz"
}

var oof = {}

我想将x和y值从foo转移到oof。有没有办法使用es6解构语法来做到这一点?

也许像这样:

oof{x,y} = foo

答案 1

虽然丑陋且有点重复,但您可以做到

({x: oof.x, y: oof.y} = foo);

它将读取对象的两个值,并将它们写入对象上各自的位置。foooof

就我个人而言,我仍然宁愿阅读

oof.x = foo.x;
oof.y = foo.y;

['x', 'y'].forEach(prop => oof[prop] = foo[prop]);

虽然。


答案 2

IMO 这是完成您正在寻找的内容的最简单方法:

let { prop1, prop2, prop3 } = someObject;
let data = { prop1, prop2, prop3 };

  // data === { prop1: someObject.prop1, ... }

基本上,分解为变量,然后使用初始值设定项速记来创建一个新对象。无需Object.assign

无论如何,我认为这是最易读的方式。您可以特此从中选择您想要的确切道具。如果你有一个只想将 props 合并到的现有对象,请执行如下操作:someObject

let { prop1, prop2, prop3 } = someObject;
let data = Object.assign(otherObject, { prop1, prop2, prop3 });
    // Makes a new copy, or...
Object.assign(otherObject, { prop1, prop2, prop3 });
    // Merges into otherObject

另一种可以说更干净的写法是:

let { prop1, prop2, prop3 } = someObject;
let newObject = { prop1, prop2, prop3 };

// Merges your selected props into otherObject
Object.assign(otherObject, newObject);

我经常将它用于请求,而我只需要几条离散数据。但是,我同意应该有一个单一的衬里来做到这一点。POST

编辑: 附言 -我最近了解到,您可以在第一步中使用超解构来从复杂对象中提取嵌套值!例如。。。

let { prop1, 
      prop2: { somethingDeeper }, 
      prop3: { 
         nested1: {
            nested2
         } 
      } = someObject;
let data = { prop1, somethingDeeper, nested2 };

另外,在创建新对象时,您可以使用展开运算符而不是 Object.assign:

const { prop1, prop2, prop3 } = someObject;
let finalObject = {...otherObject, prop1, prop2, prop3 };

或。。。

const { prop1, prop2, prop3 } = someObject;
const intermediateObject = { prop1, prop2, prop3 };
const finalObject = {...otherObject, ...intermediateObject };