Groupby 和 map lodash 保留现有字段

Groupby and map lodash keep existing fields

我有以下数据

[
  {
    "supplier_invoice_number": "DTR/12341",
    "contract_id": 789,
    "net_amount": 10000,
    "buyer_price": 10025,
    "net_qty": 8,
    "client_payment_req_id": 3,
    "clientidsupplier": 1,
    "markuptype": 2,
    "buyerclientid": 353,
    "markupvalue": 25
  },
  {
    "supplier_invoice_number": "DTR/119",
    "contract_id": 789,
    "net_amount": 10000,
    "buyer_price": 12500,
    "net_qty": 9,
    "client_payment_req_id": 3,
    "clientidsupplier": 2,
    "markuptype": 1,
    "buyerclientid": 353,
    "markupvalue": 25
  }
]

我正在使用 lodash group by 和 map 来获取这样的数据

{
buyer_price: 22525
client_payment_req_id: undefined
contract_id: "789"
net_qty: 17
}

const Data = [{
    "supplier_invoice_number": "DTR/12341",
    "contract_id": 789,
    "net_amount": 10000,
    "buyer_price": 10025,
    "net_qty": 8,
    "client_payment_req_id": 3,
    "clientidsupplier": 1,
    "markuptype": 2,
    "buyerclientid": 353,
    "markupvalue": 25
  },
  {
    "supplier_invoice_number": "DTR/119",
    "contract_id": 789,
    "net_amount": 10000,
    "buyer_price": 12500,
    "net_qty": 9,
    "client_payment_req_id": 3,
    "clientidsupplier": 2,
    "markuptype": 1,
    "buyerclientid": 353,
    "markupvalue": 25
  }
]
const finalData = _(Data)
  .groupBy('contract_id')
  .map((buyer_price, id) => ({
    client_payment_req_id: buyer_price['client_payment_req_id'],
    contract_id: id,
    buyer_price: _.sumBy(buyer_price, 'buyer_price'),
    net_qty: _.sumBy(buyer_price, 'net_qty'),

  }))
  .value()

console.log(finalData)
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

但我也想要所有剩余的字段

"client_payment_req_id": 3, “客户供应商”:1, “标记类型”:2, “buyerclientid”:353, “标记值”:25

在最后的数据中,我也想有剩余的字段,但我无法包含它们,请在这里帮助我。谢谢

所以最终数据看起来像

{
    buyer_price: 22525
    client_payment_req_id: undefined
    contract_id: "789"
    net_qty: 17,
    "client_payment_req_id": 3,
    "clientidsupplier": 1,
    "markuptype": 2,
    "buyerclientid": 353,
    "markupvalue": 25
    }

P.s - 假设所有记录中的所有其余字段都相同

你可以试试下面的方法,你的 buyer_price 实际上是一个数组,你可以保留第一个值,就像我在下面显示的那样。

const Data = [{
  "supplier_invoice_number": "DTR/12341",
  "contract_id": 789,
  "net_amount": 10000,
  "buyer_price": 10025,
  "net_qty": 8,
  "client_payment_req_id": 3,
  "clientidsupplier": 1,
  "markuptype": 2,
  "buyerclientid": 353,
  "markupvalue": 25
}, {
  "supplier_invoice_number": "DTR/119",
  "contract_id": 789,
  "net_amount": 10000,
  "buyer_price": 12500,
  "net_qty": 9,
  "client_payment_req_id": 3,
  "clientidsupplier": 2,
  "markuptype": 1,
  "buyerclientid": 353,
  "markupvalue": 25
}]
const finalData = _(Data).groupBy('contract_id').map((buyer_price, id) => ({
  client_payment_req_id: buyer_price[0]['client_payment_req_id'],
  buyerclientid: buyer_price[0]['buyerclientid'],
  contract_id: id,
  buyer_price: _.sumBy(buyer_price, 'buyer_price'),
  net_qty: _.sumBy(buyer_price, 'net_qty'),
})).value()

console.log(finalData)
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>