解构赋值来构造一个新对象 - 这可能吗? [重复]

问题描述 投票:0回答:3

是否可以使用解构赋值语法将数据对象提取到另一个对象而不是不同的变量中?

产生不同变量(foo、bar)的示例:

var {p: foo, q: bar} = {p: 42, q: true};
 
console.log(foo); // 42
console.log(bar); // true  

我需要创建一个新对象,其中包含以下属性:

var n = {
foo: 42,
bar: true
}
javascript ecmascript-6 babeljs
3个回答
15
投票

这是不可能的。术语“解构”意味着对象被“解构”为变量。 不使用临时变量污染作用域的一种方法是使用 IIFE 进行解构: obj = (({ foo = 'foo', bar = 'bar' }) => ({ foo, bar }))(obj);

这将分配默认值并仅从对象中选取有效的键。

如果不需要选择,使用原生 JS 功能执行此操作的最简洁方法是 ES6 
Object.assign

:

obj = Object.assign({ foo: 'foo', bar: 'bar' }, obj);


或者ES2018传播:

obj = { foo: 'foo', bar: 'bar', ...obj};

确实如此,但您需要两个步骤。您无法直接从一个对象解构为另一个对象,但您可以通过使用 ES6 对象表示法并将其包装到函数中来使其变得优雅。

2
投票

你不能使用解构来做到这一点,但你可以使用像这样的辅助函数:

0
投票

function retag(newStructure, source) { var result = {}; for (var key in newStructure) { result[key] = source[newStructure[key]]; } return result; } console.log(retag( { foo: 'a', bar: 'b' }, { a: false, b: 42, c: 'unused'} ));


    

© www.soinside.com 2019 - 2024. All rights reserved.