首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用解构赋值进行部分对象复制

使用解构赋值进行部分对象复制
EN

Stack Overflow用户
提问于 2018-09-04 05:08:19
回答 1查看 815关注 0票数 2

有一个输入对象需要复制到另一个对象是很常见的。通常,您需要复制一些属性,最终得到的对象非常相似,但属性较少。

解构赋值参考,这里是https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring

假设您有以下输入对象:

代码语言:javascript
复制
// an object with data
let oldObject = {
  a: 'this is a',
  b: 'this is b',
  c: 'this is c',
  d: 'this is d'
}

我是这样做的:

代码语言:javascript
复制
let myNewObject = {
  a: oldObject.a,
  b: oldObject.b,
  c: oldObject.c
}

这就是我一直在使用的:

代码语言:javascript
复制
// new version
let { a, b, c } = oldObject
let myNewObject = { a, b, c };

这是我开始使用的,似乎工作正常:

代码语言:javascript
复制
// newer version
let myNewObject = { a, b, c } = oldObject;

新版本的问题是我声明了变量a,b和c。在这种情况下没有问题(almost),但是如果它们的名称是inputoutputtempi或任何其他可能已经在作用域中声明的变量的通用名称怎么办。

所以解决方案很好,但更好的是这些变量是在那一行中以某种方式创建和销毁的,而在其他地方是不可用的。当然,myNewObject应该是可访问的。

我试着把它包装在这样的函数中,但一点也不成功:

代码语言:javascript
复制
let myNewObject = (function() { return { a, b, c } = oldObject })();

let myNewObject = (function() { let temp = { a, b, c } = oldObject; return temp; })();

所以我不确定什么是实现这一点的最好方法,我正在接近,但我遗漏了一些东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-04 07:03:48

新版本的问题是我声明了变量a,b和c,在这种情况下没有问题

这是一个大问题。

代码语言:javascript
复制
let myNewObject = { a, b, c } = oldObject;

赋值给现有的abc变量,这将在宽松模式下污染全局作用域,或在严格模式下导致错误。而myNewObject === oldObject.其ES5 variation为:

代码语言:javascript
复制
var myNewObject = (a = oldObject.a, b = oldObject.b, c = oldObject.c, oldObject);

正如在this answer中所解释的,您正在寻找的一行程序是带有非结构化参数的Life.

代码语言:javascript
复制
let myNewObject = (({ a, b, c }) => ({ a, b, c }))(oldObject);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52156208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档