是否可以将对象的某些键解包到新对象中?
我们想说,我想将a
对象中的3个密钥(b
,c
,test
)复制到新对象({ {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个不需要的密钥。)
答案 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);