解构分配以构建新对象 - 是否可能?

时间:2017-04-15 18:17:16

标签: javascript ecmascript-6 babel

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

产生不同变量的例子(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
}

3 个答案:

答案 0 :(得分:2)

这是不可能的。术语解构意味着对象解构变量。

不使用临时变量污染范围的方法是使用IIFE进行解构:

obj = (({ foo = 'foo', bar = 'bar' }) => ({ foo, bar }))(obj);

这将指定默认值,并仅从对象中选择有效的键。

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

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

答案 1 :(得分:1)

有点像,但你需要两个步骤。你不能直接从一个对象构造到另一个对象,但你可以通过使用ES6对象表示法并将其包装到一个函数中来实现它的优雅。

function transformObject(object) {
  const { p: foo, q: bar } = object;
  const newObject = {
    foo,
    bar
  };
  return newObject;
}

答案 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'}
));