对对象数组中的嵌套对象值求和
Sum the nested object values in an object array
我有一个对象数组 -
[{
title: "oranges",
id: 5802537,
cart: {
purchased: 3,
stockTotal: 9
},
price: 3,
department: "fresh fruit and veg"
},
{
title: "pasta",
id: 5802537,
cart: {
purchased: 2,
stockTotal: 15
},
price: 1,
department: "dry goods"
},
{
title: "eggs",
id: 5802537,
cart: {
purchased: 1,
stockTotal: 11
},
price: 2,
department: "baking"
}
]
我正在尝试编写一个函数,它将所有 stockTotal 加起来并从每个对象购买。
我试过这个 -
let val = items.reduce(function(previousValue, currentValue) {
return {
purchased: previousValue.cart.purchased + currentValue.cart.purchased,
stockTotal: previousValue.cart.stockTotal + currentValue.cart.stockTotal
};
});
console.log(val);
但是说读不到属性'purchased' of undefined,读不到属性 'stockTotal' of undefined。
我想知道这是否是因为 stockTotal 和 purchased 位于数组中每个对象中的它们自己的对象中?
您需要为 reduce 累加器提供一个初始值(previousValue
,我已将其更改为 acc
),并在每次迭代中从 acc
中获取当前值(或使用 0 作为后备),并向其添加项目的值:
const items = [{"title":"oranges","id":5802537,"cart":{"purchased":3,"stockTotal":9},"price":3,"department":"fresh fruit and veg"},{"title":"pasta","id":5802537,"cart":{"purchased":2,"stockTotal":15},"price":1,"department":"dry goods"},{"title":"eggs","id":5802537,"cart":{"purchased":1,"stockTotal":11},"price":2,"department":"baking"}];
const val = items.reduce(function(acc, currentValue) {
return {
purchased: (acc.purchased ?? 0) + currentValue.cart.purchased,
stockTotal: (acc.stockTotal ?? 0) + currentValue.cart.stockTotal
};
}, {});
console.log(val);
const data = [{title:"oranges",id:5802537,cart:{purchased:3,stockTotal:9},price:3,department:"fresh fruit and veg"},{title:"pasta",id:5802537,cart:{purchased:2,stockTotal:15},price:1,department:"dry goods"},{title:"eggs",id:5802537,cart:{purchased:1,stockTotal:11},price:2,department:"baking"}];
let purchased = 0, //set initial values
stockTotal = 0;
for (let item of data) { // loop items
purchased += item.cart.purchased; // increment initial values
stockTotal += item.cart.stockTotal;
}
console.log(purchased, stockTotal);
我有一个对象数组 -
[{
title: "oranges",
id: 5802537,
cart: {
purchased: 3,
stockTotal: 9
},
price: 3,
department: "fresh fruit and veg"
},
{
title: "pasta",
id: 5802537,
cart: {
purchased: 2,
stockTotal: 15
},
price: 1,
department: "dry goods"
},
{
title: "eggs",
id: 5802537,
cart: {
purchased: 1,
stockTotal: 11
},
price: 2,
department: "baking"
}
]
我正在尝试编写一个函数,它将所有 stockTotal 加起来并从每个对象购买。 我试过这个 -
let val = items.reduce(function(previousValue, currentValue) {
return {
purchased: previousValue.cart.purchased + currentValue.cart.purchased,
stockTotal: previousValue.cart.stockTotal + currentValue.cart.stockTotal
};
});
console.log(val);
但是说读不到属性'purchased' of undefined,读不到属性 'stockTotal' of undefined。 我想知道这是否是因为 stockTotal 和 purchased 位于数组中每个对象中的它们自己的对象中?
您需要为 reduce 累加器提供一个初始值(previousValue
,我已将其更改为 acc
),并在每次迭代中从 acc
中获取当前值(或使用 0 作为后备),并向其添加项目的值:
const items = [{"title":"oranges","id":5802537,"cart":{"purchased":3,"stockTotal":9},"price":3,"department":"fresh fruit and veg"},{"title":"pasta","id":5802537,"cart":{"purchased":2,"stockTotal":15},"price":1,"department":"dry goods"},{"title":"eggs","id":5802537,"cart":{"purchased":1,"stockTotal":11},"price":2,"department":"baking"}];
const val = items.reduce(function(acc, currentValue) {
return {
purchased: (acc.purchased ?? 0) + currentValue.cart.purchased,
stockTotal: (acc.stockTotal ?? 0) + currentValue.cart.stockTotal
};
}, {});
console.log(val);
const data = [{title:"oranges",id:5802537,cart:{purchased:3,stockTotal:9},price:3,department:"fresh fruit and veg"},{title:"pasta",id:5802537,cart:{purchased:2,stockTotal:15},price:1,department:"dry goods"},{title:"eggs",id:5802537,cart:{purchased:1,stockTotal:11},price:2,department:"baking"}];
let purchased = 0, //set initial values
stockTotal = 0;
for (let item of data) { // loop items
purchased += item.cart.purchased; // increment initial values
stockTotal += item.cart.stockTotal;
}
console.log(purchased, stockTotal);