【问题标题】:how to group by itemId sum qty with type bundle and parentId with type sale_order javascript?如何按 itemId 和数量与类型 bundle 和 parentId 与类型 sale_order javascript 进行分组?
【发布时间】:2018-10-22 09:17:40
【问题描述】:

请帮助我收集我的收藏,我希望总和数量相同的 itemId 和类型捆绑,以及类型为 Sale_Order 的 parentId,如下面的收藏。

`let item = [{
    id: '001',
    name: 'A',
    qty: 10,
    type:'bundle'        
  },
  {
    id: '002',
    name: 'B',
    qty: 5,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '002',
    name: 'B',
    qty: 4,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '003',
    name: 'C',
    qty: 8,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '001',
    name: 'A',
    qty: -5,
    type:'bundle'
  },
  {
    id: '002',
    name: 'B',
    qty: -5,
    parentId: '001'
    type:'Sale'
  },
  {
    id: '002',
    name: 'B',
    qty: -4,
    parentId: '001'
    type:'Sale'
  },
  {
    id: '003',
    name: 'C',
    qty: -8,
    parentId: '001'
    type:'Sale'
  }
]`

我想要这样的收藏。您可以看到相同的 itemId 类型为 bundle sum qty 和另一个 item 的 parenId 形式 bundle itemId 类型仅为 Sale_Order。

 `let item = [{
    id: '001',
    name: 'A',
    qty: 5,
    type:'bundle'        
  },
  {
    id: '002',
    name: 'B',
    qty: 5,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '002',
    name: 'B',
    qty: 4,
    parentId: '001'
    type:'Sale_Order'
  },
  {
    id: '003',
    name: 'C',
    qty: 8,
    parentId: '001'
    type:'Sale_Order'
  },`

【问题讨论】:

  • 到目前为止你做了什么?
  • 它看起来像是过滤和分组的混合体。
  • 你可以看到它让我愚蠢的结果,你能帮我举个例子

标签: javascript mongodb aggregate


【解决方案1】:

您可以先检查带有parentId 的对象,然后只推送带有'Sale_Order' 的类型。

然后检查是否存在具有相同id 和相同type 的项目,如果找到则更新qty 或将实际对象的副本推送到结果集。

var items = [{ id: '001', name: 'A', qty: 10, type: 'bundle' }, { id: '002', name: 'B', qty: 5, parentId: '001', type: 'Sale_Order' }, { id: '002', name: 'B', qty: 4, parentId: '001', type: 'Sale_Order' }, { id: '003', name: 'C', qty: 8, parentId: '001', type: 'Sale_Order' }, { id: '001', name: 'A', qty: -5, type: 'bundle' }, { id: '002', name: 'B', qty: -5, parentId: '001', type: 'Sale' }, { id: '002', name: 'B', qty: -4, parentId: '001', type: 'Sale' }, { id: '003', name: 'C', qty: -8, parentId: '001', type: 'Sale' }],
    result = items.reduce((r, o) => {
        if (o.parentId) {
            if (o.type === 'Sale_Order') {
                r.push(o);
            }
            return r;
        }
        let item = r.find(({ id, type }) => o.id === id && o.type === type);
        if (item) {
            item.qty += o.qty;
        } else {
            r.push(Object.assign({}, o));
        }
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2017-05-28
    相关资源
    最近更新 更多