I have an ajax request that returns a list of values like this:
"[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
I need it to be a javascript array with numbers:
[[-5, 5, 5], [-6, 15, 15], [7, 13, 12]]
I tried to replace the '[' and ']' for a '|' and then split by '|' and foreach item split by ',' and add them to an array, but this is not elegant at all.
Do you guys have any suggestions?
-
3Define elegant? Most string manipulations aren't really pretty.Sterling Archer– Sterling Archer2013年10月17日 04:24:52 +00:00Commented Oct 17, 2013 at 4:24
-
Using split + for loop where perhaps match would do is likely not elegant or pretty. ;-)RobG– RobG2013年10月17日 04:32:24 +00:00Commented Oct 17, 2013 at 4:32
5 Answers 5
You can use JSON.parse() to convert that string into an array, as long as you wrap it in some brackets manually first:
var value = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var json = JSON.parse("[" + value + "]");
console.log(json);
I would suggest correcting the output at the server if possible, though.
7 Comments
Name - probably in this case you just want to do something like create a 2D array by extracting all the contents of [ ] pairs and then exploding on commas.eval as last resort but I heard that eval is not a good choice?This solution is stupid in practice -- absolutely use JSON.parse as others have said -- but in the interest of having fun with regular expressions, here you go:
function getMatches(regexp, string) {
var match, matches = [];
while ((match = regexp.exec(string)) !== null)
matches.push(match[0]);
return matches;
}
function parseIntArrays(string) {
return getMatches(/\[[^\]]+\]/g, string)
.map(function (string) {
return getMatches(/\-?\d+/g, string)
.map(function (string) {
return parseInt(string);
});
});
}
parseIntArrays("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]");
Comments
If you're generating the data, and you trust it, just use eval:
var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"
var arrays = eval('[' + string + ']');
Alternatively, start returning well-formed JSON.
2 Comments
eval when the string is also valid JSON, please downvote me instead.In a function
var strToArr = function(string){ return JSON.parse('[' + string + ']')}
console.log(strToArr("[-5, 5, 5], [-6, 15, 15], [7, 13, 12]"));
var string = "[-5, 5, 5], [-6, 15, 15], [7, 13, 12]";
var arr = [];
var tmp = string.split('], ');
for (var i=0; i<tmp.length; i++) {
arr.push(tmp[i].replace(/\[|\]/g, '').split(', '));
}
Typing on my iPad so I apologize in advance for any typos.