gpt4 book ai didi

javascript - 如何在对象数组上使用 reduce 方法来创建一个具有每个对象总值的对象?

转载 作者:行者123 更新时间:2023-11-30 09:32:20 25 4
gpt4 key购买 nike

我正在尝试对一组对象使用 reduce 方法,每个对象都是一个人和他们喜欢的冰淇淋口味。目标是将此数组缩减为单个对象,该对象包含作为属性的 flavor 以及作为值列出 flavor 的总次数。

数据:

const data = [
{ name: 'Tyler', favoriteIceCreams: ['Strawberry', 'Vanilla', 'Chocolate', 'Cookies & Cream'] },
{ name: 'Richard', favoriteIceCreams: ['Cookies & Cream', 'Mint Chocolate Chip', 'Chocolate', 'Vanilla'] },
{ name: 'Amanda', favoriteIceCreams: ['Chocolate', 'Rocky Road', 'Pistachio', 'Banana'] },
{ name: 'Andrew', favoriteIceCreams: ['Vanilla', 'Chocolate', 'Mint Chocolate Chip'] },
{ name: 'David', favoriteIceCreams: ['Vanilla', 'French Vanilla', 'Vanilla Bean', 'Strawberry'] },
{ name: 'Karl', favoriteIceCreams: ['Strawberry', 'Chocolate', 'Mint Chocolate Chip'] }
];

这是我目前所拥有的,但老实说我不确定该怎么做。

let iceCreamTotals = {
Strawberry: 0,
Vanilla: 0,
Chocolate: 0,
CookiesCream: 0,
MintChocolateChip: 0,
RockyRoad: 0,
Pistachio: 0,
Banana: 0,
FrenchVanilla: 0,
VanillaBean: 0
}

data.reduce((total, current) => {

return iceCreamTotals
}, 0)

最佳答案

将此数组缩减为单个对象,因此累加器(reduce 的第二个参数,可选)应该是一个对象。然后在每个步骤中计算数组中每个元素的相应属性 (c.favoriteIceCreams.forEach)。 p[cream] = (p[cream] || 0) + 1; 只是“如果存在则加一,否则设置为 0+1”的语法糖。

const data = [
{ name: 'Tyler', favoriteIceCreams: ['Strawberry', 'Vanilla', 'Chocolate', 'Cookies & Cream'] },
{ name: 'Richard', favoriteIceCreams: ['Cookies & Cream', 'Mint Chocolate Chip', 'Chocolate', 'Vanilla'] },
{ name: 'Amanda', favoriteIceCreams: ['Chocolate', 'Rocky Road', 'Pistachio', 'Banana'] },
{ name: 'Andrew', favoriteIceCreams: ['Vanilla', 'Chocolate', 'Mint Chocolate Chip'] },
{ name: 'David', favoriteIceCreams: ['Vanilla', 'French Vanilla', 'Vanilla Bean', 'Strawberry'] },
{ name: 'Karl', favoriteIceCreams: ['Strawberry', 'Chocolate', 'Mint Chocolate Chip'] }
];

console.log(data.reduce((p, c) => {
c.favoriteIceCreams.forEach(cream => {
p[cream] = (p[cream] || 0) + 1;
});
return p;
}, {}));

关于javascript - 如何在对象数组上使用 reduce 方法来创建一个具有每个对象总值的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45528459/

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