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>
我有以下数据
[
{
"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>