繁体   English   中英

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

[英]Partial object copying using Destructuring Assignment

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

此处的解构分配参考https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Object_destructuring

假设你有这个输入对象:

// an object with data
let oldObject = {
  a: 'this is a',
  b: 'this is b',
  c: 'this is c',
  d: 'this is d'
}

我是这样做的:

let myNewObject = {
  a: oldObject.a,
  b: oldObject.b,
  c: oldObject.c
}

这是我一直在使用的一个:

// new version
let { a, b, c } = oldObject
let myNewObject = { a, b, c };

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

// newer version
let myNewObject = { a, b, c } = oldObject;

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

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

我尝试将它包装在这样的函数中,但根本没有运气:

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

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

所以我不确定实现这一目标的最佳方法是什么,我正在接近,但我错过了一些东西。

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

有一个大问题。

let myNewObject = { a, b, c } = oldObject;

分配给现有的abc变量,这将在松散模式下污染全局范围或在严格模式下导致错误。 myNewObject === oldObject 它的ES5 变体是:

var myNewObject = (a = oldObject.a, b = oldObject.b, c = oldObject.c, oldObject);

正如在这个答案中解释的那样,您正在寻找的单线是具有解构参数的 IIFE:

let myNewObject = (({ a, b, c }) => ({ a, b, c }))(oldObject);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM