需要将输入对象复制到另一个对象的情况很常见。通常,您需要复制一些属性,最终会得到一个非常相似的对象,但属性较少。
假设您有这个输入对象:
// 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。在这种情况下没有问题( almost ),但是如果它们的名称是 input
、output
、temp
、i 会怎样?
或可能已在作用域中声明的变量的任何其他通用名称。
所以解决方案很棒,但更好的是这些变量以某种方式在该行中创建和销毁,并且在其他地方不可用。 myNewObject
当然应该可以访问。
我尝试将它包装在这样的函数中,但根本没有运气:
let myNewObject = (function() { return { a, b, c } = oldObject })();
let myNewObject = (function() { let temp = { a, b, c } = oldObject; return temp; })();
所以我不确定实现这一目标的最佳方法是什么,我已经很接近了,但我错过了一些东西。
最佳答案
The problem with the newer versions is that I'm declaring variables a, b and c. In this case there is no problem
有一个大问题。
let myNewObject = { a, b, c } = oldObject;
分配给现有的a
、b
和c
变量,这将在宽松模式下污染全局范围,或者在严格模式下导致错误。而myNewObject === oldObject
。它的ES5 variation是:
var myNewObject = (a = oldObject.a, b = oldObject.b, c = oldObject.c, oldObject);
如 this answer 中所述,您正在寻找的单行代码是具有解构参数的 IIFE:
let myNewObject = (({ a, b, c }) => ({ a, b, c }))(oldObject);
关于node.js - 使用解构赋值进行部分对象复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156208/