compareByProp

compareByProp

  • (key: PropertyKey, compareFn: CompareFn) => CompareFn
  1. Create a function comparing properties intended for built-in methods such as toSorted.

    Below, we sort an array of people by name.

    const people = [{ name: 'mike' }, { name: 'emma' }, { name: 'luke' }]
    const ascending = (left, right) => left.localeCompare(right)
    const byName = compareByProp('name', ascending)
    
    const sortedPeople = people.toSorted(byName)
    console.log(sortedPeople)
    // is [
    //  { name: 'emma' },
    //  { name: 'luke' },
    //  { name: 'mike' },
    // ]
    const people = [{ name: 'mike' }, { name: 'emma' }, { name: 'luke' }]
    const ascending = (left: string, right: string) => left.localeCompare(right)
    const byName = compareByProp('name', ascending)
    
    const sortedPeople = people.toSorted(byName)
    console.log(sortedPeople)
    // is [
    //  { name: 'emma' },
    //  { name: 'luke' },
    //  { name: 'mike' },
    // ]
    
    const people = [
      { name: 'mike' },
      { name: 'emma' },
      { name: 'luke' },
    ]
    const ascending = (left, right) =>
      left.localeCompare(right)
    const byName = compareByProp('name', ascending)
    
    const sortedPeople = people.toSorted(byName)
    console.log(sortedPeople)
    // is [
    //  { name: 'emma' },
    //  { name: 'luke' },
    //  { name: 'mike' },
    // ]
    const people = [
      { name: 'mike' },
      { name: 'emma' },
      { name: 'luke' },
    ]
    const ascending = (left: string, right: string) =>
      left.localeCompare(right)
    const byName = compareByProp('name', ascending)
    
    const sortedPeople = people.toSorted(byName)
    console.log(sortedPeople)
    // is [
    //  { name: 'emma' },
    //  { name: 'luke' },
    //  { name: 'mike' },
    // ]
    
  2. We often want to sort data by a property. The example in 'What' shows this.

  3. Undefined properties are handled by compareByProp as defined in the spec, so compareFn will not need to handle them.