zent
Version:
一套前端设计语言和基于React的实现
52 lines (49 loc) • 1.05 kB
text/typescript
function cmp(a: number, b: number): number {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
}
export function getPotentialValues(
marks: Record<string | number, React.ReactNode> | undefined
) {
if (!marks) {
return [];
}
return Object.keys(marks)
.map(it => Number(it))
.filter(it => !Number.isNaN(it) && it !== Infinity)
.sort(cmp);
}
export function normalizeToPotentialValue(
potentialValues: number[],
value: number
) {
let i = 0;
let j = potentialValues.length;
// eslint-disable-next-line no-constant-condition
while (true) {
const p = Math.floor((i + j) / 2);
if (j === i + 1 || p === i) {
if (
Math.abs(potentialValues[i] - value) <=
Math.abs(potentialValues[j] - value)
) {
return potentialValues[i];
}
return potentialValues[j];
}
const mid = potentialValues[p];
if (value === mid) {
return mid;
}
if (value < mid) {
j = p;
} else if (value > mid) {
i = p;
}
}
}