All files / plugins _tools.ts

100% Statements 21/21
100% Branches 20/20
100% Functions 3/3
100% Lines 21/21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 651x       934x       934x   2886x     2886x 934x           2886x 2886x 1047x         2886x       547x       2886x 2886x     934x                               1x 1047x 1047x 64x 983x 32x   1047x    
export function cleanupOutData(
  data: number[],
  params: { leadingZero: boolean; negativeExtraSpace: boolean },
) {
  let str = '';
  let delimiter: string;
  let prev: number | string;
 
  data.forEach((item, i) => {
    // Space delimiter by default.
    delimiter = ' ';
 
    // No extra space in front of first number.
    if (i === 0) {
      delimiter = '';
    }
 
    // Remove floating-point numbers leading zeros.
    // 0.5 → .5
    // -0.5 → -.5
    let itemStr: number | string = item;
    if (params.leadingZero) {
      itemStr = removeLeadingZero(item);
    }
 
    // No extra space in front of negative number or
    // in front of a floating number if a previous number is floating too.
    if (
      params.negativeExtraSpace &&
      (itemStr < 0 || (String(itemStr).charCodeAt(0) === 46 && +prev % 1 !== 0))
    ) {
      delimiter = '';
    }
 
    // Save prev item value.
    prev = itemStr;
    str += delimiter + itemStr;
  });
 
  return str;
}
 
/**
 * Remove floating-point numbers leading zero.
 *
 * @example
 * 0.5 → .5
 *
 * @example
 * -0.5 → -.5
 *
 * @param {Float} num input number
 *
 * @return {String} output number as string
 */
export function removeLeadingZero(num: number) {
  let strNum = num.toString();
  if (0 < num && num < 1 && strNum.charCodeAt(0) === 48) {
    strNum = strNum.slice(1);
  } else if (-1 < num && num < 0 && strNum.charCodeAt(1) === 48) {
    strNum = strNum.charAt(0) + strNum.slice(2);
  }
  return strNum;
}