如何解决如何使用 reduce 来计算总数并修改我的数组?
我使用 Redux 将我的所有产品存储在一个列表中。显示的这个列表看起来像:
[
{
"id": 1,"name": "BLACK TEA","supplieruuid": "SLIGRO","price": 1.10,},{
"id": 2,"name": "GREEN TEA",{
"id": 3,"name": "PURPLE TEA","supplieruuid": "BUNZL",{
"id": 4,"name": "RAINBOW TEA",]
我正在使用这个 reduce 函数通过键 supplieruuid 将这些产品组合在一起。
const sortedBysupplierUUID = state.entities.cart.list.reduce(
(hash,{ ["supplieruuid"]: value,...rest }) => ({ ...hash,[value]: (hash[value] || []).concat({ ["supplieruuid"]: value,...rest }) }),{}
);
return Object.keys(sortedBysupplierUUID).map((key) => ({ title: key,data: sortedBysupplierUUID[key] }));
返回的内容如下:
[
{
title: "SLIGRO",data: [
{
"id": 1,{
"id": 2,],{
title: "BUNZL",data: [
{
"id": 3,{
"id": 4,]
这一切都很好,除了我将 total 添加到对象中,它将计算每个对象的“数据”数组中项目的总价格,如下所示:
[
{
title: "SLIGRO",total: 2.20,data: [
{
"id": 1,{
"id": 2,{
title: "BUNZL",data: [
{
"id": 3,{
"id": 4,]
解决方法
const selectSortedItems = (state) => {
const sortedBySupplierUUID = state.entities.cart.list.reduce((hash,{ ["supplieruuid"]: value,...rest }) => ({ ...hash,[value]: (hash[value] || []).concat({ ...rest }) }),{});
return Object.keys(selectSortedItems(sortedBySupplierUUID)).map(key => (
{
title: key,total: sortedBySupplierUUID[key].reduce((acc,cur) => acc + cur.price),data: sortedBySupplierUUID[key]
})
)};
}
更直观的方法
const selectSortedItems = (state) => {
const itemsMap = {};
state.entities.cart.list.map((item) => {
if (itemsMap[item.supplieruuid]) {
itemsMap[item.supplieruuid].total += item.price;
itemsMap[item.supplieruuid].data.push(item);
} else {
itemsMap[item.supplieruuid] = {
title: item.supplieruuid,total: item.price,data: [item]
}
}
});
return Object.values(itemsMap);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。