Skip to content

leftJoin

Input two arrays left and right, and return the array formed by performing a left join of left with right. This is commonly used to combine arrays of objects that contain related information, similar to how it is done in SQL.

Additionally, it accepts two parameters: leftKey and rightKey. These can be field paths of getByPath or callback functions, used to provide identifiers to distinguish elements. The merge function is used to generate the return array objects.

Added in v0.0.1

Usage

ts
import { leftJoin } from 'parsnip-kit'

const leftArray0 = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' },
]
const rightArray0 = [
  { id: 1, age: 25 },
  { id: 3, age: 30 },
]

leftJoin(
  leftArray0,
  rightArray0,
  (item) => item.id,
  (item) => item.id,
  (left, right) => ({ ...left, ...(right || {}) }),
) // [{ id: 1, name: 'Alice', age: 25 }, { id: 2, name: 'Bob' }, { id: 3, name: 'Charlie', age: 30 }]


const leftArray1 = [
  { id: 1, info: { name: 'Alice', age: 25 } },
  { id: 2, info: { name: 'Bob', age: 35 } },
  { id: 3, info: { name: 'Charlie', age: 30 } },
]
const rightArray1 = [
  { name: 'Alice', experience: ['software engineer', 'designer'] },
  { name: 'Charlie', experience: ['freelance'] },
]

leftJoin(
  leftArray1,
  rightArray1,
  'info.name',
  'name',
  (left, right) => ({ name: left.info.name, job: right?.experience[0] ?? null }),
) // [{ name: 'Alice', job: 'software engineer' }, { name: 'Bob', job: null }, { name: 'Charlie', job: 'freelance' }]

API

Type Parameter

ArgTypeDescription
Textends objectType of elements of left array in a left join
Uextends objectType of elements of right array in a left join
Rextends objectType of elements of array returned

Arguments

ArgTypeOptionalDefaultDescription
leftT[]falseundefinedThe left array in a left join
rightU[]falseundefinedThe right array in a left join
leftKeystring | ((item: T, index: number, arr: T[]) => any)falseundefinedProvide an identifier to distinguish elements in the left array
rightKeystring | ((item: U, index: number, arr: U[]) => any)falseundefinedProvide an identifier to distinguish elements in the right array
merge(left: T, right: U | undefined) => RfalseundefinedReturn the result of merging elements from left and right arrays.

Returns

Type
R[]