首页 > 解决方案 > 解构 JavaScript 对象时如何只选择几个字段?

问题描述

我似乎不记得如何写这个解构模式,你能帮我吗?

假设我有一个这样的对象:

{
  id: 'po_495743057439095',
  object: 'payout',
  amount: 18560,
  arrival_date: 1576195200,
  automatic: true,
  balance_transaction: 'txn_32472309478903284',
  created: 1575774863,
  currency: 'eur',
  description: 'STRIPE PAYOUT',
  destination: 'ba_329047329048323',
  failure_balance_transaction: null,
  failure_code: null,
  failure_message: null,
  livemode: true,
  metadata: {},
  method: 'standard',
  source_type: 'card',
  statement_descriptor: null,
  status: 'in_transit',
  type: 'bank_account',
}

(这实际上是 Stripe API 中的一个对象)。

我想将此对象推送到我的自定义数组中,但只保留 5 个字段。

我可以:

arr.push({
  id: myObject.id,
  object: myObject.object,
  amount: myObject.amount,
  arrival_date: myObject.arrival_date,
  created: myObject.created
})

但我想知道是否有任何语法可以帮助我以更短的方式实现相同的目标。

基本上我很确定有一种语法可以做到这一点,它只需要写一次“myObject”这个词,写一次每个键名,并且不创建临时变量,但我不记得如何了。

我不是要写一个特定的函数,我不需要帮助。我只是在问是否有内置的解构语法来执行此操作,因为我很确定有但我找不到它,尽管之前搜索了很长时间。

编辑:

实际上,我正在寻找(如果存在)这种语法:

arr.push({id, object, amount, arrival_date, created} = myObject)

不幸的是,它不起作用,整个对象都被添加了。这接近正确了吗?

标签: javascriptecmascript-6destructuring

解决方案


我不确定您是否可以仅使用 es6 对象解构来做到这一点。但是你可以利用一些 es6 的功能来实现 lodash 的pick功能。

Object.assign(
  {},
  ...['id', 'object', 'amount', 'arrival_date', 'created'].map(key => ({
    [key]: myObject[key]
  }))
);

    const myObject = {
      id: 'po_495743057439095',
      object: 'payout',
      amount: 18560,
      arrival_date: 1576195200,
      automatic: true,
      balance_transaction: 'txn_32472309478903284',
      created: 1575774863,
      currency: 'eur',
      description: 'STRIPE PAYOUT',
      destination: 'ba_329047329048323',
      failure_balance_transaction: null,
      failure_code: null,
      failure_message: null,
      livemode: true,
      metadata: {},
      method: 'standard',
      source_type: 'card',
      statement_descriptor: null,
      status: 'in_transit',
      type: 'bank_account',
    };

    const newObject = Object.assign(
      {},
      ...['id', 'object', 'amount', 'arrival_date', 'created'].map(key => ({
        [key]: myObject[key]
      }))
    );
    console.log(newObject);


推荐阅读