groupBy

groupBy

  • (toGroup: GroupingFn) => (collection: Collection) => GroupedValues
  1. Place values of a collection into groups

    const groupByFloor = groupBy(Math.floor)
    const result = groupByFloor([1.2, 2.7, 1.8])
    console.log(result)
    // is {
    //   1: [1.2, 1.8]
    //   2: [2.7]
    // }
    const groupByFloor = groupBy(Math.floor)
    const result = groupByFloor([1.2, 2.7, 1.8])
    console.log(result)
    // is {
    //   1: [1.2, 1.8]
    //   2: [2.7]
    // }
    
    const groupByFloor = groupBy(Math.floor)
    const result = groupByFloor([1.2, 2.7, 1.8])
    console.log(result)
    // is {
    //   1: [1.2, 1.8]
    //   2: [2.7]
    // }
    const groupByFloor = groupBy(Math.floor)
    const result = groupByFloor([1.2, 2.7, 1.8])
    console.log(result)
    // is {
    //   1: [1.2, 1.8]
    //   2: [2.7]
    // }
    
  2. Sometimes we want to place values into groups. Below, we work for a jet ski rental company. Let's split our jet skis into classes of 'beginner' and 'proficient.'

    const jetSkis = [
      {
        brand: 'WaveRunner',
        mph: 45,
      },
      {
        brand: 'Sea-Doo',
        mph: 50,
      },
      {
        brand: 'Jet Ski',
        mph: 55,
      },
    ]
    
    const getRecommendedExperience = jetSki => {
      return jetSki.mph < 50 ? 'beginner' : 'proficient'
    }
    const groupByExperience = groupBy(getRecommendedExperience)
    const jetSkisByExperience = groupByExperience(jetSkis)
    console.log(jetSkisByExperience)
    // is {
    //   beginner: [
    //     { brand: 'WaveRunner', mph: 45 }
    //   ],
    //   proficient: [
    //     { brand: 'Sea-Doo', mph: 50 }
    //     { brand: 'Jet Ski', mph: 55 }
    //   ],
    // }
    type JetSki = { brand: string; mph: number }
    
    const jetSkis: JetSki[] = [
      {
        brand: 'WaveRunner',
        mph: 45,
      },
      {
        brand: 'Sea-Doo',
        mph: 50,
      },
      {
        brand: 'Jet Ski',
        mph: 55,
      },
    ]
    
    const getRecommendedExperience = (jetSki: JetSki) => {
      return jetSki.mph < 50 ? 'beginner' : 'proficient'
    }
    const groupByExperience = groupBy(getRecommendedExperience)<JetSki[]>
    const jetSkisByExperience = groupByExperience(jetSkis)
    console.log(jetSkisByExperience)
    // is {
    //   beginner: [
    //     { brand: 'WaveRunner', mph: 45 }
    //   ],
    //   proficient: [
    //     { brand: 'Sea-Doo', mph: 50 }
    //     { brand: 'Jet Ski', mph: 55 }
    //   ],
    // }
    
    const jetSkis = [
      {
        brand: 'WaveRunner',
        mph: 45,
      },
      {
        brand: 'Sea-Doo',
        mph: 50,
      },
      {
        brand: 'Jet Ski',
        mph: 55,
      },
    ]
    
    const getRecommendedExperience = jetSki => {
      return jetSki.mph < 50 ?
          'beginner'
        : 'proficient'
    }
    const groupByExperience = groupBy(
      getRecommendedExperience
    )
    const jetSkisByExperience =
      groupByExperience(jetSkis)
    console.log(jetSkisByExperience)
    // is {
    //   beginner: [
    //     { brand: 'WaveRunner', mph: 45 }
    //   ],
    //   proficient: [
    //     { brand: 'Sea-Doo', mph: 50 }
    //     { brand: 'Jet Ski', mph: 55 }
    //   ],
    // }
    type JetSki = { brand: string; mph: number }
    
    const jetSkis: JetSki[] = [
      {
        brand: 'WaveRunner',
        mph: 45,
      },
      {
        brand: 'Sea-Doo',
        mph: 50,
      },
      {
        brand: 'Jet Ski',
        mph: 55,
      },
    ]
    
    const getRecommendedExperience = (
      jetSki: JetSki
    ) => {
      return jetSki.mph < 50 ?
          'beginner'
        : 'proficient'
    }
    const groupByExperience = groupBy(
      getRecommendedExperience
    )<JetSki[]>
    const jetSkisByExperience =
      groupByExperience(jetSkis)
    console.log(jetSkisByExperience)
    // is {
    //   beginner: [
    //     { brand: 'WaveRunner', mph: 45 }
    //   ],
    //   proficient: [
    //     { brand: 'Sea-Doo', mph: 50 }
    //     { brand: 'Jet Ski', mph: 55 }
    //   ],
    // }