gpt4 book ai didi

javascript - 如何从对象数组中创建数量最多的项目的对象映射?

转载 作者:行者123 更新时间:2023-12-02 23:02:47 25 4
gpt4 key购买 nike

JavaScript 新手,这是我的第一篇文章。所以我有这个对象数组:

  var allOrders = [
{
id: 1,
order: [
{ itemName: "Shoes", quantity: 1 },
{ itemName: "Socks", quantity: 3 },
{ itemName: "Sandals", quantity: 5 },
{ itemName: "Shirts", quantity: 1 },
],
},
{
id: 2,
order: [
{ itemName: "Hats", quantity: 1 },
{ itemName: "Shoes", quantity: 3 },
{ itemName: "Sandals", quantity: 5 },
{ itemName: "Shirts", quantity: 1 },
],
},
]

我已经完成了一个嵌套循环来访问所有的 itemName 和数量。

for (let i = 0; i < allOrders.length; i++) {
let orders = allOrders[i].order

for (let j = 0; j < orders.length; j++) {
let itemName = orders[j].itemName;
let quantity = orders[j].quantity;
}
}

我想要做的是返回某种对象映射器,它将按降序计算每个唯一项目的数量总数,如下所示

{
Sandals: 10,
Shoes: 4,
Socks: 3,
Shirts: 3,
Hats: 1
}

谢谢!

最佳答案

归约为按 itemName 索引的对象,然后对其条目进行排序,以使用 Object.fromEntries 创建排序对象:

var allOrders = [
{
id: 1,
order: [
{ itemName: "Shoes", quantity: 1 },
{ itemName: "Socks", quantity: 3 },
{ itemName: "Sandals", quantity: 5 },
{ itemName: "Shirts", quantity: 1 },
],
},
{
id: 2,
order: [
{ itemName: "Hats", quantity: 1 },
{ itemName: "Shoes", quantity: 3 },
{ itemName: "Sandals", quantity: 5 },
{ itemName: "Shirts", quantity: 1 },
],
},
];

const unordered = allOrders.reduce((a, { order }) => {
order.forEach(({ itemName, quantity }) => {
a[itemName] = (a[itemName] || 0) + quantity;
});
return a;
}, {});
const ordered = Object.fromEntries(
Object.entries(unordered).sort(
(a, b) => b[1] - a[1]
)
);
console.log(ordered);

请记住,只有在使用某些迭代方法(例如 Object.getOwnPropertyNamesReflect)时,对象属性迭代顺序才在 ES6+ 环境中得到保证。 ownKeys。 (如果您使用其他方法,例如 for..inObject.keysObject.entries,键的顺序是实现定义的)

关于javascript - 如何从对象数组中创建数量最多的项目的对象映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57719170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com