首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按销售者分组销售,从每个销售者处获得总销售额,按销售总额订购。

按销售者分组销售,从每个销售者处获得总销售额,按销售总额订购。
EN

Stack Overflow用户
提问于 2022-04-13 00:36:42
回答 7查看 99关注 0票数 2

我有这样一个数组:

代码语言:javascript
复制
[
    {
        "orderId": 1,
        "orderDate": "2021-04-28T08:20:58Z",
        "status": "Confirmed",
        "sellerName": "Chris Gilmour",
        "revenue": 2316.49
    },
    {
        "orderId": 2,
        "orderDate": "2020-12-19T12:30:18Z",
        "status": "Confirmed",
        "sellerName": "Alanna Sumner",
        "revenue": 2928.88
    },
    {
        "orderId": 4,
        "orderDate": "2020-12-24T08:00:09Z",
        "status": "Confirmed",
        "sellerName": "Beth North",
        "revenue": 1550.19
    },
    {
        "orderId": 5,
        "orderDate": "2021-06-06T04:40:48Z",
        "status": "Confirmed",
        "sellerName": "Laura Ponce",
        "revenue": 35.5
    },
    {
        "orderId": 8,
        "orderDate": "2021-08-27T05:13:40Z",
        "status": "Canceled",
        "sellerName": "Blade Newman",
        "revenue": 2957.29
    },
    {
        "orderId": 9,
        "orderDate": "2020-12-26T08:07:57Z",
        "status": "Confirmed",
        "sellerName": "Alanna Sumner",
        "revenue": 2164.75
    },
    {
        "orderId": 10,
        "orderDate": "2021-04-23T18:44:19Z",
        "status": "Confirmed",
        "sellerName": "Blade Newman",
        "revenue": 2287.55
    }
]

我希望新的阵列是:

代码语言:javascript
复制
[ 
    {
        "sellerName": "Blade Newman",
        "totalRevenue": 5244.84
    },
    {
        "sellerName": "Alanna Sumner",
        "totalRevenue": 5093.63
    },
    { 
        "sellerName": "Chris Gilmour",
        "totalRevenue" : 2316.49
    },
    {
        "sellerName": "Beth North",
        "totalRevenue": 1550.19
    }

]

因此,我希望数组按sellerName分组,销售总量之和由销售总额最高的卖家进行汇总和订购。

我试图通过使用forEachs来解决这个问题,但是我失败了,如果有人能帮我的话,那就太好了。

提前谢谢。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2022-04-13 01:58:55

正如@CarySwoveland在注释中所描述的,您可以为对象中的每个卖家积累收入,将对象条目转换为数组进行排序,然后根据排序的值生成一个新的对象:

代码语言:javascript
复制
const sales = [{
    "orderId": 1,
    "orderDate": "2021-04-28T08:20:58Z",
    "status": "Confirmed",
    "sellerName": "Chris Gilmour",
    "revenue": 2316.49
  },
  {
    "orderId": 2,
    "orderDate": "2020-12-19T12:30:18Z",
    "status": "Confirmed",
    "sellerName": "Alanna Sumner",
    "revenue": 2928.88
  },
  {
    "orderId": 4,
    "orderDate": "2020-12-24T08:00:09Z",
    "status": "Confirmed",
    "sellerName": "Beth North",
    "revenue": 1550.19
  },
  {
    "orderId": 5,
    "orderDate": "2021-06-06T04:40:48Z",
    "status": "Confirmed",
    "sellerName": "Laura Ponce",
    "revenue": 35.5
  },
  {
    "orderId": 8,
    "orderDate": "2021-08-27T05:13:40Z",
    "status": "Canceled",
    "sellerName": "Blade Newman",
    "revenue": 2957.29
  },
  {
    "orderId": 9,
    "orderDate": "2020-12-26T08:07:57Z",
    "status": "Confirmed",
    "sellerName": "Alanna Sumner",
    "revenue": 2164.75
  },
  {
    "orderId": 10,
    "orderDate": "2021-04-23T18:44:19Z",
    "status": "Confirmed",
    "sellerName": "Blade Newman",
    "revenue": 2287.55
  }
];

let totalsales = sales.reduce((acc, {
  sellerName,
  revenue
}) => {
  acc[sellerName] = (acc[sellerName] || 0) + revenue;
  return acc;
}, {});

totalsales = Object.entries(totalsales)
.sort((a, b) => b[1] - a[1])
.map((v) => ({ sellerName: v[0], totalRevenue: v[1] }))

console.log(totalsales)

票数 3
EN

Stack Overflow用户

发布于 2022-04-13 00:50:19

你可以试试这个:

代码语言:javascript
复制
    const newArray=[];
    for (var order of orders) {
        var index = newArray.findIndex((a)=>a.sellerName==order.sellerName);
        if (index>-1){
            newArray[index].totalRevenue+=order.revenue;
        } else {
            newArray.push({
                sellerName: order.sellerName,
                totalRevenue: order.revenue
           }) 
       }
   } 
   newArray.sort((a,b)=>b.totalRevenue-a.totalRevenue);
票数 1
EN

Stack Overflow用户

发布于 2022-04-13 12:44:28

与其他答案相同的技术,但折叠成一个单一的函数:

代码语言:javascript
复制
const total = (sales) => 
  Object .entries (sales .reduce (
    (a, {sellerName: n, revenue}) => ({...a, [n] : (a[n] ?? 0) + revenue}), 
    {}
  )) .map (([sellerName, totalRevenue]) => ({sellerName, totalRevenue}))

const sales = [{orderId: 1, orderDate: "2021-04-28T08: 20: 58Z", status: "Confirmed", sellerName: "Chris Gilmour", revenue: 2316.49}, {orderId: 2, orderDate: "2020-12-19T12: 30: 18Z", status: "Confirmed", sellerName: "Alanna Sumner", revenue: 2928.88}, {orderId: 4, orderDate: "2020-12-24T08: 00: 09Z", status: "Confirmed", sellerName: "Beth North", revenue: 1550.19}, {orderId: 5, orderDate: "2021-06-06T04: 40: 48Z", status: "Confirmed", sellerName: "Laura Ponce", revenue: 35.5}, {orderId: 8, orderDate: "2021-08-27T05: 13: 40Z", status: "Canceled", sellerName: "Blade Newman", revenue: 2957.29}, {orderId: 9, orderDate: "2020-12-26T08: 07: 57Z", status: "Confirmed", sellerName: "Alanna Sumner", revenue: 2164.75}, {orderId: 10, orderDate: "2021-04-23T18: 44: 19Z", status: "Confirmed", sellerName: "Blade Newman", revenue: 2287.55}]

console .log (total (sales))
代码语言:javascript
复制
.as-console-wrapper {max-height: 100% !important; top: 0}

使用reduce,我们得到了以下中间格式:

代码语言:javascript
复制
{
  "Chris Gilmour": 2316.49,
  "Alanna Sumner": 5093.63,
  "Beth North": 1550.19,
  "Laura Ponce": 35.5,
  "Blade Newman": 5244.84
}

然后Object .entries把它变成

代码语言:javascript
复制
[
  ["Chris Gilmour", 2316.49],
  ["Alanna Sumner", 5093.63],
  ["Beth North", 1550.19],
  ["Laura Ponce", 35.5],
  ["Blade Newman", 5244.84]
]

map调用将其转化为最终形式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71850556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档