alignLines.ts 824 B

12345678910111213141516171819202122
  1. export interface AlignLine {
  2. value: number;
  3. range: [number, number];
  4. }
  5. // 对齐参考线去重,对于相同位置的多条参考线,取长度范围的最小值和最大值,并基于此范围将多条参考线合并为一条
  6. export const uniqAlignLines = (lines: AlignLine[]) => {
  7. const uniqLines: AlignLine[] = []
  8. lines.forEach(line => {
  9. const index = uniqLines.findIndex(_line => _line.value === line.value)
  10. if(index === -1) uniqLines.push(line)
  11. else {
  12. const uniqLine = uniqLines[index]
  13. const rangeMin = Math.min(uniqLine.range[0], line.range[0])
  14. const rangeMax = Math.max(uniqLine.range[1], line.range[1])
  15. const range: [number, number] = [rangeMin, rangeMax]
  16. const _line = { value: line.value, range }
  17. uniqLines[index] = _line
  18. }
  19. })
  20. return uniqLines
  21. }