maj*_*mer 105 javascript destructuring ecmascript-6
例如,如果我有两个对象:
var foo = {
x: "bar",
y: "baz"
}
Run Code Online (Sandbox Code Playgroud)
和
var oof = {}
Run Code Online (Sandbox Code Playgroud)
我想将x和y值从foo转移到oof.有没有办法使用es6解构语法?
也许是这样的:
oof{x,y} = foo
Run Code Online (Sandbox Code Playgroud)
log*_*yth 83
虽然丑陋而且有点重复,但你可以做到
({x: oof.x, y: oof.y} = foo);
Run Code Online (Sandbox Code Playgroud)
它将读取foo对象的两个值,并将它们写入对象上的各自位置oof.
就我个人而言,我还是会读
oof.x = foo.x;
oof.y = foo.y;
Run Code Online (Sandbox Code Playgroud)
要么
['x', 'y'].forEach(prop => oof[prop] = foo[prop]);
Run Code Online (Sandbox Code Playgroud)
虽然.
Ber*_*rgi 33
不,解构不支持shorthands中的成员表达式,但是当前时只支持普通的属性名.目前已经谈关于这样的esdiscuss,但不建议将它做成ES6.
Object.assign然而,您可以使用- 如果您不需要所有属性,您仍然可以使用
var foo = …,
oof = {};
{
let {x, y} = foo;
Object.assign(oof, {x, y})
}
Run Code Online (Sandbox Code Playgroud)
Zfa*_*len 21
IMO这是完成您所需要的最简单的方法:
let { prop1, prop2, prop3 } = someObject;
let data = { prop1, prop2, prop3 };
// data === { prop1: someObject.prop1, ... }
Run Code Online (Sandbox Code Playgroud)
基本上,解构为变量然后使用初始化程序简写来创建一个新对象.没必要Object.assign
无论如何,我认为这是最可读的方式.您可以在此选择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
Run Code Online (Sandbox Code Playgroud)
另一种可以说更清晰的写作方式是:
let { prop1, prop2, prop3 } = someObject;
let newObject = { prop1, prop2, prop3 };
// Merges your selected props into otherObject
Object.assign(otherObject, newObject);
Run Code Online (Sandbox Code Playgroud)
我将此用于POST请求很多,我只需要一些离散数据.但是,我同意应该有一个班轮来做这件事.
Gaa*_*far 11
除了Object.assign存在物体传播语法这是ECMAScript的一个阶段2提议.
var foo = {
x: "bar",
y: "baz"
}
var oof = { z: "z" }
oof = {...oof, ...foo }
console.log(oof)
/* result
{
"x": "bar",
"y": "baz",
"z": "z"
}
*/
Run Code Online (Sandbox Code Playgroud)
但要使用此功能,您需要使用stage-2或transform-object-rest-spread插件为babel.这是关于babel的演示stage-2
如果您使用的是BabelJS,现在可以激活我的插件babel-plugin-transform-object-from-destructuring(请参阅npm软件包以了解安装和使用情况).
我有同样的问题在这个线程中描述,对我来说,当你从解构表达式创建一个对象时,这是非常令人疲惫的,特别是当你必须重命名,添加或删除属性时.有了这个插件,维护这样的场景对你来说变得更加容易.
let myObject = {
test1: "stringTest1",
test2: "stringTest2",
test3: "stringTest3"
};
let { test1, test3 } = myObject,
myTest = { test1, test3 };
Run Code Online (Sandbox Code Playgroud)
可以写成:
let myTest = { test1, test3 } = myObject;
Run Code Online (Sandbox Code Playgroud)
let myArray = ["stringTest1", "stringTest2", "stringTest3"];
let [ test1, , test3 ] = myArray,
myTest = [ test1, test3 ];
Run Code Online (Sandbox Code Playgroud)
可以写成:
let myTest = [ test1, , test3 ] = myArray;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37378 次 |
| 最近记录: |