繁体   English   中英

Javascript 解构并赋值给新的 object

[英]Javascript destructuring and assignment into new object

假设我有一个 object:

let x = {a:1,b:2,c:3}

现在我可以解构如下:

let {a,b} = x;

是否可以将这些分配(与解构在同一行)到一个新的 object 中,相当于?:

let newObject = {a,b};

或者(在伪代码中,我意识到这是行不通的)

let newObject = {a,b} = x;

还是我需要使用 lodash _.pickBy function 之类的东西?

let newObject = _.pickBy(x,['a','b'])

我问的原因是,我想为函数签名做类似的事情:

let fun = ({a,b}) => {
    let args = {a,b}; // <---- 
}

这似乎是不可能的,因为虽然看起来一样,但解构赋值和对象语法是完全不同的东西。

let a, b;
{a,b} = x  <-- {a,b} is not an object

如果您尝试返回解构赋值的结果,它仍将返回x ,即完整的对象。

const result = {a,b} = x 
// `result` is the full object

或者

const result = ({a,b} = x);
// `result` is the full object

无论如何,写这样的单行代码可能会让队友感到非常困惑。 无论如何,它会在同行评审期间引起我的注意:)

我认为您需要的是在没有中间变量的情况下按键过滤 object 。

这是我的解决方案:

let x = {a:1,b:2,c:3}
let y = {}
;({a: y.a, b: y.b} = x)
let filterObjectByKeys = (object, keys) => Object.fromEntries(keys.map(k => [k, object[k]]))
let x = {a:1,b:2,c:3}
let y = filterObjectByKeys(x, ['a', 'b'])

参考:

  1. 通过解构为新的 object 赋值
  2. 在 ES6 中按键过滤 object 属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM