View difference between Paste ID: XvJdAjvi and h2KGv5rZ
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
}