javascript - 对对象数组内的对象数组中的值进行排序

标签 javascript arrays filter

我想对所有商品名称进行排序,并将所有适当的数量添加在一起,以便能够确定哪些商品订购最多。

这是下面的对象数组。我想尝试过滤和映射对象数组,并列出每个对象的 itemName 和适当的总数量,只是不确定如何链接在一起。

function OrderRepository() {

return orderLines.filter((itemName) => {
   orderLines.map((quantity) => {
     return 
  }
 }
}

提供的对象数组

OrderRepository.prototype.getYesterdaysOrders = function getYesterdaysOrders() {
var yesterdaysOrders = [
    {
        id: 1,
        orderLines: [
            { itemName: "Item 01", quantity: 1 },
            { itemName: "Item 02", quantity: 3 },
            { itemName: "Item 03", quantity: 25 },
            { itemName: "Item 04", quantity: 12 },
        ],
    },
    {
        id: 2,
        orderLines: [
            { itemName: "Item 01", quantity: 1 },
            { itemName: "Item 08", quantity: 42 },
            { itemName: "Item 09", quantity: 13 },
            { itemName: "Item 12", quantity: 37 },
        ],
    },
    {
        id: 3,
        orderLines: [
            { itemName: "Item 12", quantity: 16 },
        ],
    },
    {
        id: 4,
        orderLines: [
            { itemName: "Item 10", quantity: 11 },
            { itemName: "Item 11", quantity: 10 },
        ],
    },
    {
        id: 5,
        orderLines: [
            { itemName: "Item 06", quantity: 7 },
            { itemName: "Item 07", quantity: 2 },
            { itemName: "Item 12", quantity: 14 },
        ],
    },
    {
        id: 6,
        orderLines: [
            { itemName: "Item 05", quantity: 17 },
        ],
    },
    {
        id: 7,
        orderLines: [
            { itemName: "Item 03", quantity: 5 },
            { itemName: "Item 07", quantity: 2 },
        ],
    },
    {
        id: 8,
        orderLines: [
            { itemName: "Item 02", quantity: 13 },
            { itemName: "Item 07", quantity: 7 },
            { itemName: "Item 09", quantity: 2 },
        ],
    },
    {
        id: 9,
        orderLines: [
            { itemName: "Item 01", quantity: 4 },
            { itemName: "Item 06", quantity: 17 },
            { itemName: "Item 07", quantity: 3 },
        ],
    },
    {
        id: 10,
        orderLines: [
            { itemName: "Item 11", quantity: 12 },
            { itemName: "Item 12", quantity: 1 },
        ],
    },
 ];

 return yesterdaysOrders;
};

期望的结果

{ itemName: "商品 01", 数量: 6 } { itemName: "项目 02", ...... }

我希望 itemName 与该商品列出的总数量按顺序排列。因此昨天商品 01 的总订购次数为 6 次。

最佳答案

您可以借助 Map 来计算项目数量并将想要的结果呈现为数组。

var data = [{ id: 1, orderLines: [{ itemName: "Item 01", quantity: 1 }, { itemName: "Item 02", quantity: 3 }, { itemName: "Item 03", quantity: 25 }, { itemName: "Item 04", quantity: 12 }] }, { id: 2, orderLines: [{ itemName: "Item 01", quantity: 1 }, { itemName: "Item 08", quantity: 42 }, { itemName: "Item 09", quantity: 13 }, { itemName: "Item 12", quantity: 37 }] }, { id: 3, orderLines: [{ itemName: "Item 12", quantity: 16 }] }, { id: 4, orderLines: [{ itemName: "Item 10", quantity: 11 }, { itemName: "Item 11", quantity: 10 }] }, { id: 5, orderLines: [{ itemName: "Item 06", quantity: 7 }, { itemName: "Item 07", quantity: 2 }, { itemName: "Item 12", quantity: 14 }] }, { id: 6, orderLines: [{ itemName: "Item 05", quantity: 17 }] }, { id: 7, orderLines: [{ itemName: "Item 03", quantity: 5 }, { itemName: "Item 07", quantity: 2 }] }, { id: 8, orderLines: [{ itemName: "Item 02", quantity: 13 }, { itemName: "Item 07", quantity: 7 }, { itemName: "Item 09", quantity: 2 }] }, { id: 9, orderLines: [{ itemName: "Item 01", quantity: 4 }, { itemName: "Item 06", quantity: 17 }, { itemName: "Item 07", quantity: 3 }] }, { id: 10, orderLines: [{ itemName: "Item 11", quantity: 12 }, { itemName: "Item 12", quantity: 1 }] }],
    result = Array.from(
        data.reduce((m, { orderLines }) => {
            orderLines.forEach(({ itemName, quantity }) => m.set(itemName, (m.get(itemName) || 0) + quantity));
            return m;
        }, new Map),
        ([itemName, quantity]) => ({ itemName, quantity })
    );

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

关于javascript - 对对象数组内的对象数组中的值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57836453/

相关文章:

javascript - 在 </head> 标签和 </body> 标签之前包含 Javascript 的优缺点是什么?

javascript - Ember.js - 组件内部模型

javascript - jquery checkbox - 仅获取选中复选框的值

javascript - 使用 Array.prototype.findIndex() 查找对象

r - 从 R 中的列表中过滤值

sql-server - 对数据进行高级筛选的 SQL 复制

javascript - 在 jquery 追加后或添加 innerHTML 后重绘页面

arrays - 使用 array.sort 时出错

javascript - 从 jquery 中的二维数组填充下拉列表

arrays - 来自一维数组的唯一值,无需迭代