有一个输入对象需要复制到另一个对象是很常见的。通常,您需要复制一些属性,最终得到的对象非常相似,但属性较少。
假设您有以下输入对象:
// 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; })();
所以我不确定什么是实现这一点的最好方法,我正在接近,但我遗漏了一些东西。
发布于 2018-09-04 07:03:48
新版本的问题是我声明了变量a,b和c,在这种情况下没有问题
这是一个大问题。
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中所解释的,您正在寻找的一行程序是带有非结构化参数的Life.
let myNewObject = (({ a, b, c }) => ({ a, b, c }))(oldObject);
https://stackoverflow.com/questions/52156208
复制相似问题