Java中的相关值将Json分组"/>
按Java中的相关值将Json分组
此JSON作为订单提供,其中包含与vendorId相关的多个产品。我希望能够将其分组为一个独立的数组集,而不是将所有列为一组较长的产品。我该如何实现?
我的代码
let order = {
"products": [
{
"_id": "5e989346731e4d11c4a06331",
"productId": "5e9ee6ad8ac51f4654846552",
"vendorId": "5e8547fb14033339a86cc349",
"name": "Laterral",
"price": 1000,
"count": 2
},
{
"_id": "5e990589823c501e640be183",
"productId": "5e989346731e4d11c4a06331",
"vendorId": "5e8547fb14033339a86cc349",
"name": "ANother Product",
"price": 12453,
"count": 3
},
{
"_id": "5e9ee6ad8ac51f4654846552",
"productId": "5e989346731e4d11c4a06331",
"vendorId": "5e8547fb14033339a86cc309",
"name": "ANother Product",
"price": 12453,
"count": 3
},
{
"_id": "5e9904c3cd559006fc2b92b3",
"productId": "5e989346731e4d11c4a06331",
"vendorId": "5e8547fb14033339a86cc309",
"name": "ANother Product",
"price": 12453,
"count": 3
}
],
"address":"Colonel 10",
"amount":"234555",
"transaction_id":"3334hdd",
"status":"Not processed"
}
let products = order.products
//console.log(products)
arr = []
products.map(product => {
vendorId = product.vendorId
price = product.price
quantity = product.count
productId = product.productId
if(vendorId == product.vendorId) {
arr.vendorId = vendorId
arr.productId = productId
arr.price = price
arr.count = quantity
arr.total = price * quantity; //arr.reduce((cum, xtr) => cum + xtr.price * xtr.count,0)
tem = "========= \n " +arr.count+" Products ordered from this vendor " + vendorId + "\n" + arr.productId +" for "+ arr.price + " Total of " + arr.total;
}
console.log(arr)
})
This is my output
[
vendorId: '5e8547fb14033339a86cc349',
productId: '5e9ee6ad8ac51f4654846552',
price: 1000,
count: 2,
total: 2000
]
[
vendorId: '5e8547fb14033339a86cc349',
productId: '5e989346731e4d11c4a06331',
price: 12453,
count: 3,
total: 37359
]
[
vendorId: '5e8547fb14033339a86cc309',
productId: '5e989346731e4d11c4a06331',
price: 12453,
count: 3,
total: 37359
]
[
vendorId: '5e8547fb14033339a86cc309',
productId: '5e989346731e4d11c4a06331',
price: 12453,
count: 3,
total: 37359
]
This is my intended output
"order":{
"vendor":[
{
"productId":"5e9ee6ad8ac51f4654846552",
"price":1000,
"count":2,
"total":2000
},
{
"productId":"5e989346731e4d11c4a06331",
"price":12453,
"count":3,
"total":37359
}
],
"vendorId":"5e8547fb14033339a86cc349",
"gtotal":39359,
"vendor":[
{
"productId":"5e989346731e4d11c4a06331",
"price":12453,
"count":3,
"total":37359
},
{
"productId":"5e989346731e4d11c4a06331",
"price":12453,
"count":3,
"total":37359
}
],
"vendorId":"5e8547fb14033339a86cc309",
"gtotal":74718
}
什么是最好的方法。
回答如下:这不会产生您所需的输出,因为您所需的输出完全无效
但是这接近我想您想要的
let order={"products":[{"_id":"5e989346731e4d11c4a06331","productId":"5e9ee6ad8ac51f4654846552","vendorId":"5e8547fb14033339a86cc349","name":"Laterral","price":1000,"count":2},{"_id":"5e990589823c501e640be183","productId":"5e989346731e4d11c4a06331","vendorId":"5e8547fb14033339a86cc349","name":"ANother Product","price":12453,"count":3},{"_id":"5e9ee6ad8ac51f4654846552","productId":"5e989346731e4d11c4a06331","vendorId":"5e8547fb14033339a86cc309","name":"ANother Product","price":12453,"count":3},{"_id":"5e9904c3cd559006fc2b92b3","productId":"5e989346731e4d11c4a06331","vendorId":"5e8547fb14033339a86cc309","name":"ANother Product","price":12453,"count":3}],"address":"Colonel 10","amount":"234555","transaction_id":"3334hdd","status":"Not processed"};
const products = order.products;
const vendor = products.reduce((acc, {productId, price, count, vendorId}) => {
let total = price * count;
let existing_vendor = acc.find(i => i.vendorId === vendorId);
if (!existing_vendor) {
acc.push({products:[{productId, price, count, total}], vendorId, gtotal:total});
} else {
existing_vendor.products.push({productId, price, count, total});
existing_vendor.gtotal += total;
}
return acc
}, []);
const result = {order: {vendor}};
console.log(result);
更多推荐
按Java中的相关值将Json分组
发布评论