Advertisement
Draco18s

parse arrays

Sep 1st, 2022
804
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export function ParseArrayValues(str) {
  2.     if(str == null || str == '') throw 'String to parse cannot be null or empty';
  3.     let result = [];
  4.     let output = [];
  5.     let trainyard = [];
  6.     let value = -1;
  7.     for (let i = 0; i < str.length; i++) {
  8.         let exp = str[i];
  9.         if (exp == ' ') continue;
  10.         if (exp >= '0' && exp <= '9') {
  11.             if (value == -1) value = 0;
  12.             value = value * 10 + parseInt(exp.toString());
  13.             continue;
  14.         }
  15.         else if (value != -1) {
  16.             output.push(value);
  17.             value = -1;
  18.         }
  19.         if (exp == ',') continue;
  20.         switch (exp) {
  21.             case '-':
  22.             case '[':
  23.                 output.push(exp);
  24.                 break;
  25.             case ']':
  26.                 while (trainyard.length > 0) {
  27.                     let c = trainyard.pop();
  28.                     if (c == '[') break;
  29.                     output.push(c);
  30.                 }
  31.                 output.push(exp);
  32.                 break;
  33.             default:
  34.                 if (!(exp >= '0' && exp <= '9')) {
  35.                     throw 'unexpected token ' + exp;
  36.                 }
  37.                 break;
  38.         }
  39.     }
  40.     if (value != -1) {
  41.         output.push(value);
  42.         value = -1;
  43.     }
  44.     while (trainyard.length > 0) {
  45.         output.push(trainyard.pop());
  46.     }
  47.     var arrayStack = [];
  48.     var curArray = [];
  49.     while (output.length > 0) {
  50.         let exp = output.shift();
  51.         switch (exp) {
  52.             case '-':
  53.                 var v = -output.shift();
  54.                 curArray.push(v);
  55.                 break;
  56.             case '[':
  57.                 arrayStack.push(curArray);
  58.                 curArray = [];
  59.                 break;
  60.             case ']':
  61.                 var t = arrayStack.pop();
  62.                 t.push(curArray);
  63.                 curArray = t;
  64.                 break;
  65.             default:
  66.                 curArray.push(exp);
  67.                 break;
  68.         }
  69.     }
  70.     ns.print(curArray[0]);
  71.     return curArray[0];
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement