为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript:折叠属性值上的对象数组,求和数量属性,保留最近的

Javascript:折叠属性值上的对象数组,求和数量属性,保留最近的

千巷猫影 2019-05-02 22:19:15
寻找更实用的“功能”方式......我有一个产品的对象看起来像这样(注意重复skuid的)"products": [     {       "skuid": "B1418",       "name": "Test Product 1",       "price": 7,       "lastOrderedDate": 20181114,       "quantity": 2     },{       "skuid": "B3446",       "name": "Test Product 2",       "price": 6,       "lastOrderedDate": 20190114,       "quantity": 2     },{       "skuid": "B1418",       "name": "Test Product 1",       "price": 7,       "lastOrderedDate": 20180516,       "quantity": 5     },{       "skuid": "B3446",       "name": "Test Product 2",       "price": 6,       "lastOrderedDate": 20180411,       "quantity": 11     }]我想创建一个新的数组,每个不同的单个对象,skuid但SUMS所有的quantity值,并保留最新的lastOrderedDate。最终结果如下:"products": [     {       "skuid": "B1418",       "name": "Test Product 1",       "price": 7,       "lastOrderedDate": 20181114,       "quantity": 7     },{       "skuid": "B3446",       "name": "Test Product 2",       "price": 6,       "lastOrderedDate": 20190114,       "quantity": 13     }]我可以用一堆forEach和if来做,但我想学习一种更简洁的方法来做到这一点。或许有一种,那么reduce?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以Map稍后获取并获取所有值作为结果集。


const

    getGrouped = (m, o) => {

        var item = m.get(o.skuid);

        if (!item) return m.set(o.skuid, Object.assign({}, o));

        if (item.lastOrderedDate < o.lastOrderedDate) item.lastOrderedDate = o.lastOrderedDate;

        item.quantity += o.quantity;

        return m;

    };



var data = { products: [{ skuid: "B1418", name: "Test Product 1", price: 7, lastOrderedDate: 20181114, quantity: 2 }, { skuid: "B3446", name: "Test Product 2", price: 6, lastOrderedDate: 20190114, quantity: 2 }, { skuid: "B1418", name: "Test Product 1", price: 7, lastOrderedDate: 20180516, quantity: 5 }, { skuid: "B3446", name: "Test Product 2", price: 6, lastOrderedDate: 20180411, quantity: 11 }] },

    result = Array.from(data.products

        .reduce(getGrouped, new Map)

        .values()

    );


console.log(result);

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


查看完整回答
反对 回复 2019-05-17
  • 3 回答
  • 0 关注
  • 347 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信