例如,如果我有两个对象:
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
无论如何,我认为这是最易读的方式。您可以在此选择someObject
您想要的确切props。如果您有一个现有的对象,您只想将这些props合并到其中,请执行以下操作:
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
我只需要几块离散数据的请求。但是,我同意应该有一个单一的班轮来做这件事。
编辑:PS - 我最近了解到您可以在第一步中使用超解构从复杂对象中提取嵌套值!例如...
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 };
不,解构不支持速记中的成员表达式,但目前仅支持普通的属性名称。目前已经谈关于这样的esdiscuss,但不建议将它做成ES6。
但是,您可能可以使用Object.assign
- 如果您不需要所有自己的属性,您仍然可以这样做
var foo = …,
oof = {};
{
let {x, y} = foo;
Object.assign(oof, {x, y})
}
如果您正在使用BabelJS,您现在可以激活我的插件babel-plugin-transform-object-from-destructuring
(请参阅 npm 包的安装和使用)。
我在这个线程中遇到了同样的问题,对我来说,当您从解构表达式创建对象时非常累人,尤其是当您必须重命名、添加或删除属性时。使用此插件,您可以更轻松地维护此类场景。
let myObject = {
test1: "stringTest1",
test2: "stringTest2",
test3: "stringTest3"
};
let { test1, test3 } = myObject,
myTest = { test1, test3 };
可以写成:
let myTest = { test1, test3 } = myObject;
let myArray = ["stringTest1", "stringTest2", "stringTest3"];
let [ test1, , test3 ] = myArray,
myTest = [ test1, test3 ];
可以写成:
let myTest = [ test1, , test3 ] = myArray;