ES6 - 解构赋值 - 将现有对象的一些属性解压缩到新对象?

时间:2018-05-23 12:11:48

标签: javascript object ecmascript-6 destructuring

是否可以将对象的某些键解包到新对象中?

我们想说,我想将a对象中的3个密钥(bctest)复制到新对象({ {1}})。下面提到代码将起作用。

abc

我是否可以在一个声明中执行此操作?

还有一种方法。

const test = {a:1, b:2, c:3, d:4, e:5 };
const {a, b, c} = test;
const abc = { a, b, c, f: 6};

但是通过这种方法,我稍后会删除不需要的密钥(在我的情况下为const test = {a:1, b:2, c:3, d:4, e:5 }; const abc = { ...test, f: 6}; d)。

(最佳案例解决方案:如果我们不必跟踪不需要的密钥。可能会有n个不需要的密钥。)

3 个答案:

答案 0 :(得分:5)

您可以使用object rest来构建初始对象:

const test = {a:1, b:2, c:3, d:4, e:5 };
const {d, e, ...abc} = { ...test, f: 6};

console.log(abc);

答案 1 :(得分:1)

如果您知道新对象中需要的特定密钥,我会使用旧的var canvas = document.getElementById("canvas"); var ctx = canvas.getContext("2d"); ctx.fillStyle = "blue"; ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "red"; ctx.fillRect(10, 10, 40, 40);

Object.assign

如果你有很多道具来提取语法变得更重,我建议采用不同的方法,但如果它只是一些道具,我认为这是更清洁,更快的方法 - 技术上一行如果你不计算变量声明

答案 2 :(得分:0)

使用params和IIFE(立即调用函数表达式)的解构,我们可以摆脱源对象中不需要的键。



const test = {a:1, b:2, c:3, d:4, e:5 };
const abc = (({a,b,c}) => ({a, b, c}))(test);
console.log(abc);




对于ES5兼容性,



var test = {a:1, b:2, c:3, d:4, e:5 };
    
var abc = (function (test) {
  return {
    a: test.a,
    b: test.b,
    c: test.c
  }
})(test);

console.log(abc);