UNPKG

@aryth/rank-matrix

Version:

Return ranks of each element in a 2-d array

19 lines (15 loc) 565 B
import { mapper } from '@vect/matrix-mapper'; /** * * @param {*[]} mx * @param {function(*,*):number} comparer Compare 'prev' & 'next' element in an array. If return < 0, 'prev' comes first. If return > 0, 'next' comes first. * @param {function(*):boolean} [filter] * @return {number[]} Rank order array, where 0 denote the first. */ const rank = (mx, comparer, filter) => { let flat = mx.flat(1); if (filter) flat = flat.filter(filter); flat = flat.sort(comparer); return mapper(mx, x => (x = flat.indexOf(x)) >= 0 ? x : NaN); }; export { rank };