例えば、2つのオブジェクトがあるとします。
var foo = {
x: "bar",
y: "baz"
}
と
var oof = {}
で、fooからoofにxとyの値を転送したいと思いました。es6のデストラクチャリング構文を使って、それを行う方法はありますか?
おそらく、次のようなものです。
oof{x,y} = foo
いいえ、現時点では、destructuringはshorthandsのメンバー表現をサポートしておらず、plain propertynamesのみです。esdiscussでそのような話](https://mail.mozilla.org/pipermail/es-discuss/2015-March/042195.html)がありましたが、ES6に提案はされません。
しかし、Object.assign
は使えるかもしれません。もし、すべてのプロパティを必要としないのであれば、次のようにすることができます。
var foo = …,
oof = {};
{
let {x, y} = foo;
Object.assign(oof, {x, y})
}
Object.assign` 以外に、ECMAScript の Stage 2 の提案である object spread syntax があります。
var foo = {
x: "bar",
y: "baz"
}
var oof = { z: "z" }
oof = {...oof, ...foo }
console.log(oof)
/* result
{
"x": "bar",
"y": "baz",
"z": "z"
}
*/
しかし、この機能を使用するには、 stage-2
または babel 用の transform-object-rest-spread
プラグインを使用する必要があります。以下は、babel と stage-2
のデモ です。
クローム53.0.2785.89で動作しています。
let foo = {
x: "bar",
y: "baz"
};
let oof = {x, y} = foo;
console.log(`oof: ${JSON.stringify(oof)});
//prints
oof: {
"x": "bar",
"y": "baz"
}