Javascript 是否有一个快速的一行程序可以将对象的属性放到新对象上?

Javascript 是否有一个快速的一行程序可以将对象的属性放到新对象上?,javascript,ecmascript-6,Javascript,Ecmascript 6,具有与以下相同效果的事物: const obj = {a:'a', b:'b', c:'c'}; const {a, b} = obj; const result = {a, b}; 或者,在ES5中: const obj = {a:'a', b:'b', c:'c'}; const result = Object.keys(obj) .filter((key) => ['a', 'b', 'c'].includes(key)) .reduce((acc, key) =&

具有与以下相同效果的事物:

const obj = {a:'a', b:'b', c:'c'};
const {a, b} = obj;
const result = {a, b};
或者,在ES5中:

const obj = {a:'a', b:'b', c:'c'};
const result = Object.keys(obj)
    .filter((key) => ['a', 'b', 'c'].includes(key))
    .reduce((acc, key) => acc[key] = obj[key], {})
我想

const result = { a, b } = obj;
会起作用,但很明显,它的作用是:

const result = obj;
在这种情况下,
result
具有obj的所有属性,并且它似乎也“指向”它(
result.a='changed'
导致
obj.a===changed
为真)。这是虫子吗

const result = {...obj}

这样行吗?它不是深度复制,但也不是您的第一个示例。

要克隆
对象,使其指向不同的内存位置,即对其中一个克隆的更改不会影响另一个,您可以使用:

1-
Object.assign()

2.-排列运算符(在ES6中):

你可以排队了

const result = { a, b } = obj;
正如其他人所说,通过使用obj的深度副本,而不是指obj本身,以您似乎想要的方式工作。实现这一点的一种方法可能是您正在寻找的“快速一行”,即

const result = (({ a, b }) => ({ a, b }))(JSON.parse(JSON.stringify(obj)));
JSON.parse(JSON.stringify(obj))
只提供了
obj
的深层副本。因此,对
结果的更改不会影响
obj
,反之亦然

constobj={a:'a',b:'b',c:'c'};
const result=({a,b})=>({a,b}))(JSON.parse(JSON.stringify(obj));
控制台日志(结果)//预期输出:对象{a:“a”,b:“b”}
结果a=‘已更改’;
控制台日志(结果)//预期输出:对象{a:“已更改”,b:“b”}

控制台日志(obj)//预期输出:对象{a:“a”,b:“b”,c:“c”}
我只需要使用一个库来提取关键点来创建新对象,例如lodash。但是,如果您还想要一个深度克隆,那么您需要进行深度克隆。ES5(ECMA-262 ed 5)是ECMAScript 2011。事情有了进展,最新的版本是ECMA-262 ed 9又名ECMAScript 2018。“这是一个bug吗?”没有。赋值的结果是赋值的值<代码>常量结果={a,b}=obj
constresult=({a,b}=obj)相同
其中
{a,b}=obj
是一个解构赋值,即分配给两个局部变量
a
b
。您没有创建新对象。换句话说,您的代码相当于
a=obj.a;b=对象b;const result=objconst result = { a, b } = obj;
const result = (({ a, b }) => ({ a, b }))(JSON.parse(JSON.stringify(obj)));