Skip to content

@jsvision/datagrid / sortRowsMulti

Function: sortRowsMulti()

sortRowsMulti<T>(rows, keys, columns): T[]

Defined in: datagrid/src/sort.ts:109

Ordered multi-key sort. Compares each column's typed value in key order, returning the first non-zero result; equal-on-all-keys rows keep their source order (stable). Never mutates rows — always returns a new array. Keys whose columnId is absent from columns are silently dropped; an empty (or all-unknown) key list returns the rows in source order.

Type Parameters

T

T

Parameters

rows

readonly T[]

The row snapshot to order (not mutated).

keys

readonly SortKey[]

The ordered sort directives (first is primary).

columns

ReadonlyMap<string, GridColumn<T, unknown>>

The column model, keyed by GridColumn.id, providing each key's value accessor and its optional compare/nulls.

Returns

T[]

A new array of rows in sorted order.

Example

ts
import { column, sortRowsMulti } from '@jsvision/datagrid';
interface Sale { region: string; qty: number; }
const rows: Sale[] = [
  { region: 'East', qty: 150 },
  { region: 'West', qty: 800 },
];
const columns = [
  column({ id: 'region', title: 'Region', value: (r: Sale) => r.region }),
  column({ id: 'qty', title: 'Qty', value: (r: Sale) => r.qty }),
];
// qty ascending, then region descending:
const ordered = sortRowsMulti(
  rows,
  [{ columnId: 'qty', dir: 'asc' }, { columnId: 'region', dir: 'desc' }],
  new Map(columns.map((c) => [c.id, c])),
);