• Performs a right outer join on two homogeneous sequences.

    Type Parameters

    • TFirst
    • TKey
    • TResult

    Parameters

    • first: Iterable<TFirst>

      The first sequence of the join operation.

    • second: Iterable<TFirst>

      The second sequence of the join operation.

    • keySelector: (item: TFirst) => TKey

      Function that projects the key given an element of one of the sequences to join.

    • secondSelector: (item: TFirst) => TResult

      Function that projects the result given just an element from second where there is no corresponding element in first.

    • bothSelector: (a: TFirst, b: TFirst) => TResult

      Function that projects the result given an element from first and an element from second that match on a common key.

    • OptionalequalityComparer: EqualityComparer<TKey>

      A function to compare keys.

    Returns IEnumerable<TResult>

    A sequence containing results projected from a right outer join of the two input sequences.

    const right = 'right';
    const both = 'both';
    const missing = null;

    type Side = typeof right | typeof both;
    type Person = { id: number; name: string };

    const magnus: Person = { id: 1, name: 'Magnus' };
    const terry1: Person = { id: 2, name: 'Terry' };
    const adam: Person = { id: 3, name: 'Adam' };
    const john1: Person = { id: 4, name: 'John' };
    const john4: Person = { id: 9, name: 'John' };

    const john2: Person = { id: 5, name: 'John' };
    const jane: Person = { id: 6, name: 'Jane' };
    const terry2: Person = { id: 7, name: 'Terry' };
    const john3: Person = { id: 8, name: 'John' };

    const people1 = from([magnus, terry1, adam, john1, john4]);
    const people2 = from([john2, jane, terry2, john3]);

    const result = rightJoinHomogeneous<string, { side: Side; left: Person | null; right: Person }>(
    people1,
    people2,
    person => person.name,
    person => ({ side: right, left: missing, right: person }),
    (personLeft, personRight) => ({ side: both, left: personLeft, right: personRight })
    )
    .toArray();

    expect(result).toEqual([
    { side: both, left: john1, right: john2 },
    { side: both, left: john4, right: john2 },
    { side: right, left: missing, right: jane },
    { side: both, left: terry1, right: terry2 },
    { side: both, left: john1, right: john3 },
    { side: both, left: john4, right: john3 }
    ]);

    TFirst The type of elements in the first sequence.

    TSecond The type of elements in the second sequence.

    TKey The type of the key returned by the key selector functions.

    TResult The type of the result elements.