SHOW:
|
|
- or go back to the newest paste.
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 | - | //error |
33 | + | |
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 | - | //var t = []; |
51 | + | |
52 | - | //curArray.push(t); |
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 | } |