모든 초보자 호출: 파트 II의 숙제에 대한 해결책

안녕하세요, 코더 여러분! 💻

이 초보자 시리즈에서는 다음 초기 데이터를 기반으로 한 연습을 제공했습니다.

const purchases = [
    {item: 'socks', amount: 25.98, date: '2022-05-07 09:31:29'},
    {item: 'jacket', amount: 145.98, date: '2022-05-17 17:01:09'},
    {item: 'cap', amount: 12.99, date: '2022-05-17 17:03:12'},
    {item: 'socks', amount: 43.99, date: '2022-06-11 18:24:16'},
    {item: 'cap', amount: 13.99, date: '2022-06-11 18:24:16'},
    {item: 'jacket', amount: 132.99, date: '2022-06-21 11:21:35'},
    {item: 'socks', amount: 13.99, date: '2022-06-23 09:43:28'},
    {item: 'socks', amount: 12.99, date: '2022-07-01 13:14:56'},
    {item: 'jacket', amount: 132.99, date: '2022-07-03 15:24:24'},
    {item: 'cap', amount: 32.99, date: '2022-07-05 11:14:15'},
    {item: 'socks', amount: 13.99, date: '2022-07-07 11:14:15'},
];


Create a list of best and worst selling items of each month.
Best and worst are defined by the revenue they generated.



예상 결과:

const topFlops = {
  "2022-05": {
    top: 'jacket',
    flop: 'cap'
  },
  "2022-06": {
    top: 'jacket',
    flop: 'cap'
  },
  "2022-07": {
    top: 'jacket',
    flop: 'socks'
  }
}


솔루션을 구현하는 방법을 살펴보겠습니다.

단계별 솔루션



먼저, 우리가 해야 할 일을 평이한 영어로 작성해 봅시다.
  • 월별, 품목별 공동구매
  • 매월 첫 번째와 마지막 항목을 가져와 topflop로 만듭니다.

  • 좋아. 코드 개요를 작성해 보겠습니다.

    const purchases = [ /* omitted for readability */];
    const itemsMonthlyRevenue = getItemsMonthlyRevenue(purchases);
    const topFlop = getTopFlopFromMonthlyRevenue(itemsMonthlyRevenue);
    



    getItem 월 수익


    getItemsMonthlyRevenue 매장 아이템의 월별 수익에 기존에 있던 것과 비교하여 한 수준을 추가해야 합니다.

    const getItemsMonthlyRevenue = (purchases) => {
        let monthlyRevenue = {}
        purchases.forEach(function (purchase) {
            const purchaseDate = purchase.date.substring(0, 7);
            if (monthlyRevenue[purchaseDate] === undefined) {
                monthlyRevenue[purchaseDate] = {}
            }
            monthlyRevenue[purchaseDate][purchase.item] = purchase.amount + (monthlyRevenue[purchaseDate][purchase.item] || 0);
        })
    
        return monthlyRevenue;
    }
    
    const purchases = [ /* omitted for readability */];
    const itemsMonthlyRevenue = getItemsMonthlyRevenue(purchases);
    console.log(JSON.stringify(itemsMonthlyRevenue, null, 2));
    


    파트 II의 첫 번째 실습과의 주요 차이점은 monthlyRevenue[purchaseDate]가 이제 개체이므로 액세스하기 전에 초기화되었는지 확인해야 한다는 것입니다.

    그것을 실행하고 콘솔에서 무엇을 얻는지 봅시다.

    산출:

    {
      "2022-05": {
        "socks": 25.98,
        "jacket": 145.98,
        "cap": 12.99
      },
      "2022-06": {
        "socks": 57.980000000000004,
        "cap": 13.99,
        "jacket": 132.99
      },
      "2022-07": {
        "socks": 26.98,
        "jacket": 132.99,
        "cap": 32.99
      }
    }
    


    훌륭한. 온투getTopFlopFromMonthlyRevenue !


    getTopFlopFromMonthlyRevenue




    const getTopFlopFromMonthlyRevenue = (monthlyRevenue) => {
        let topFlop = {};
        const NAME_IDX = 0;
        const REVENUE_IDX = 1;
        for (let month in monthlyRevenue) {
            // step 1: get an array of item/monthlyRevenue
            const productsSales = Object.entries(monthlyRevenue[month]);
    
            // step 2: sort by revenue
            productsSales.sort(function (p1, p2) {
                return p2[REVENUE_IDX] < p1[REVENUE_IDX] ? 1 : -1;
            })
    
            // step 3: fill the topFlop array object
            topFlop[month] = ({
                flop: productsSales[0][NAME_IDX],
                top: productsSales[productsSales.length - 1][NAME_IDX]
            })
        }
    
        return topFlop;
    }
    
    


    무슨 일이야?
    매월 항목 목록을 키로, 수익을 값으로 보유하고 있으며 이것이 우리가 정렬하려는 것입니다.Object.entries 튜플의 배열을 반환하는 [key, value] 을 사용합니다. 예시:

    console.log(monthlyRevenue['2022-06']);
    // outputs
    [
      [ "socks", 57.980000000000004 ],
      [ "cap", 13.99 ],
      [ "jacket", 132.99 ],
    ]
    


    이제 해당 배열을 정렬하고 각각 floptop가 될 첫 번째 요소와 마지막 요소를 가져올 수 있습니다.

    함께 모아서




    const getItemsMonthlyRevenue = (purchases) => {
        let monthlyRevenue = {}
        purchases.forEach(function (purchase) {
            const purchaseDate = purchase.date.substring(0, 7);
            if (monthlyRevenue[purchaseDate] === undefined) {
                monthlyRevenue[purchaseDate] = {}
            }
            monthlyRevenue[purchaseDate][purchase.item] = purchase.amount + (monthlyRevenue[purchaseDate][purchase.item] || 0);
        })
    
        return monthlyRevenue;
    }
    
    const getTopFlopFromMonthlyRevenue = (monthlyRevenue) => {
        let topFlop = {};
        const NAME_IDX = 0;
        const REVENUE_IDX = 1;
        for (let month in monthlyRevenue) {
            const productsSales = Object.entries(monthlyRevenue[month]);
    
            productsSales.sort(function (p1, p2) {
                return p2[REVENUE_IDX] < p1[REVENUE_IDX] ? 1 : -1;
            })
    
            topFlop[month] = ({
                flop: productsSales[0][NAME_IDX],
                top: productsSales[productsSales.length - 1][NAME_IDX]
            })
        }
    
        return topFlop;
    }
    
    
    const purchases = [
        {item: 'socks', amount: 25.98, date: '2022-05-07 09:31:29'},
        {item: 'jacket', amount: 145.98, date: '2022-05-17 17:01:09'},
        {item: 'cap', amount: 12.99, date: '2022-05-17 17:03:12'},
        {item: 'socks', amount: 43.99, date: '2022-06-11 18:24:16'},
        {item: 'cap', amount: 13.99, date: '2022-06-11 18:24:16'},
        {item: 'jacket', amount: 132.99, date: '2022-06-21 11:21:35'},
        {item: 'socks', amount: 13.99, date: '2022-06-23 09:43:28'},
        {item: 'socks', amount: 12.99, date: '2022-07-01 13:14:56'},
        {item: 'jacket', amount: 132.99, date: '2022-07-03 15:24:24'},
        {item: 'cap', amount: 32.99, date: '2022-07-05 11:14:15'},
        {item: 'socks', amount: 13.99, date: '2022-07-07 11:14:15'},
    ];
    const itemsMonthlyRevenue = getItemsMonthlyRevenue(purchases);
    const topFlop = getTopFlopFromMonthlyRevenue(itemsMonthlyRevenue);
    console.log(JSON.stringify(topFlop, null, 2));
    


    초보자로서 작업을 처리하는 방법을 확인하는 데 도움이 되기를 바랍니다.

    즐거운 코딩하세요! ⌨️

    좋은 웹페이지 즐겨찾기