是否可以在现有对象上分解结构?(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
例如,如果我有两个对象:
var foo = {
x: "bar",
y: "baz"
}
和
var oof = {}
我想将x和y值从foo转移到oof。有没有办法使用es6解构语法来做到这一点?
也许像这样:
oof{x,y} = foo
虽然丑陋且有点重复,但您可以做到
({x: oof.x, y: oof.y} = foo);
它将读取对象的两个值,并将它们写入对象上各自的位置。foo
oof
就我个人而言,我仍然宁愿阅读
oof.x = foo.x;
oof.y = foo.y;
或
['x', 'y'].forEach(prop => oof[prop] = foo[prop]);
虽然。
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 };