对象扩展过滤器键

时间:2019-07-19 13:36:41

标签: javascript object ecmascript-6

我有

let a = {foo:45, bar:25}

我只想将属性foo设置为b。

let b = {foo:a.foo}  //this can work

但是您可以看到,我不得不重写foo两次。

有没有办法告诉JavaScript:将 a 中的属性 [propname] 设置为 [propname] < / em> b

类似于传播算子

b = {...a} //without having to delete bar

3 个答案:

答案 0 :(得分:3)

您可以删除不需要的属性。

let a = { foo: 45, bar: 25 },
    { bar, ...b } = a;

console.log(b);

答案 1 :(得分:2)

a proposal允许使用语法

const b = { a.foo };

但是在那之前,重复属性名称的代码是最简单的解决方案:

const b = { foo: a.foo };

答案 2 :(得分:1)

这很丑陋且冗长,但是您不必两次指定“ foo”,也不必了解其他属性:

let a = {foo:45, bar:25};

let b = Object.fromEntries(Object.entries(a).filter(([k]) => k === "foo"));

console.log(b);

另一个丑陋的解决方案使用is not recommended, and forbidden in strict mode的关键字with

let a = {foo:45, bar:25};

let b = (a => { with(a) { return {foo} } })(a);

console.log(b);