首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Lodash在嵌套对象中分组和合并

使用Lodash在嵌套对象中分组和合并
EN

Stack Overflow用户
提问于 2019-01-27 15:46:11
回答 3查看 559关注 0票数 0

我有如下对象数据:

代码语言:javascript
复制
[
    {
        name: "Green Tea Brownie",
        price: 60,
        amount: 10,
        seller: {
            seller_id: 124,
            seller_name: "Merry Shop"
        }      
    },
    {
        name: "Cocoa Chiffon",
        price: 20,
        amount: 50,
        seller: {
            seller_id: 124,
            seller_name: "Merry Shop"          
        }      
    },
    {
        name: "Milky Donut",
        price: 40,
        amount: 100
        seller: {
            seller_id: 421,
            seller_name: "Sweet Bakery"   
        }      
    }
]

因此,我希望按"seller_id“对数据进行分组,并将顶级数据分配给对象名称"orders",如下所示:

代码语言:javascript
复制
[
    {
        seller_id: 124,
        seller_name: "Merry Shop",
        orders: [
            {
                name: "Green Tea Brownie",
                price: 60,
                amount: 10
            },
            {
                name: "Cocoa Chiffon",
                price: 20,
                amount: 50
            }
        ]
    },
    {
        seller_id: 421,
        seller_name: "Sweet Bakery",
        orders: [
            {
                name: "Milky Donut",
                price: 40,
                amount: 100
            }
        ]
    }
]

几个小时前我试着解决这个问题。有人能解决这个案子吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-27 15:58:18

您可以使用_.groupBy(),然后将组设置为_.map()请求的格式:

代码语言:javascript
复制
const { flow, partialRight: pr, groupBy, map, first, omit } = _

const fn = flow(
  pr(groupBy, 'seller.seller_id'),
  pr(map, group => ({
    ...first(group).seller,
    orders: map(group, pr(omit, 'seller'))
  }))
)

const data = [{"name":"Green Tea Brownie","price":60,"amount":10,"seller":{"seller_id":124,"seller_name":"Merry Shop"}},{"name":"Cocoa Chiffon","price":20,"amount":50,"seller":{"seller_id":124,"seller_name":"Merry Shop"}},{"name":"Milky Donut","price":40,"amount":100,"seller":{"seller_id":421,"seller_name":"Sweet Bakery"}}]

const result = fn(data)

console.log(result)
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2019-01-27 16:05:02

如果您喜欢使用普通的JS,您可以使用减缩

代码语言:javascript
复制
const data = [{"name":"Green Tea Brownie","price":60,"amount":10,"seller":{"seller_id":124,"seller_name":"Merry Shop"}},{"name":"Cocoa Chiffon","price":20,"amount":50,"seller":{"seller_id":124,"seller_name":"Merry Shop"}},{"name":"Milky Donut","price":40,"amount":100,"seller":{"seller_id":421,"seller_name":"Sweet Bakery"}}]


const output = data.reduce((op,{name,price,amount,seller})=>{
  if(op[seller['seller_id']]){
    op[seller['seller_id']]['orders'].push({name,price,amount})
   }
  else {
    op[seller['seller_id']] = {
      seller_name: seller.seller_name,
      seller_id: seller.seller_id,
      orders: [{name,price,amount}]
    }
  }
 return op;
},{})

console.log(Object.values(output))

票数 0
EN

Stack Overflow用户

发布于 2019-01-27 16:14:35

下面是一个使用reduce的纯JS解决方案

代码语言:javascript
复制
const orders = [{
    name: "Green Tea Brownie",
    price: 60,
    amount: 10,
    seller: {
        seller_id: 124,
        seller_name: "Merry Shop"
    }      
}, {
    name: "Cocoa Chiffon",
    price: 20,
    amount: 50,
    seller: {
        seller_id: 124,
        seller_name: "Merry Shop"          
    }      
}, {
    name: "Milky Donut",
    price: 40,
    amount: 100,
    seller: {
        seller_id: 421,
        seller_name: "Sweet Bakery"   
    }      
}];

const ordersBySeller = Object.values(orders.reduce((accum, { name, price, amount, seller: { seller_id, seller_name } }) => {
  const sellerOrders = accum[seller_id] ? accum[seller_id].orders || [] : [];
  accum[seller_id] = { seller_id, seller_name, orders: [...sellerOrders, { name, price, amount } ] };
  return accum;
}, {}));

console.log(ordersBySeller);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54389917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档