2

I am trying to grab some values out of a sting that looks like this:

W1:0.687268668116, URML:0.126432054521, MH:0.125022031608, W2:0.017801539275, S3:0.00869514129605, PC1:0.00616885024382, S5L:0.0058163445156, RM1L:0.00540508783268, C2L:0.00534633687797, S4L:0.00475882733094, S2L:0.00346630632748

I want to make an array of all the keys and another array of all the values i.e. [W1, URML, MH...] and [0.687268668116, 0.126432054521...] I have this snippet that does the trick, but only for the first value:

var foo = str.substring(str.indexOf(":") + 1);
asked Nov 27, 2013 at 14:59
1
  • 2
    str.split(" ").map(function(elem) { return elem.split(":")[1] }; Commented Nov 27, 2013 at 15:00

4 Answers 4

7

Use split().
Demo here: http://jsfiddle.net/y9JNU/

var keys = [];
var values = [];
str.split(', ').forEach(function(pair) {
 pair = pair.split(':');
 keys.push(pair[0]);
 values.push(pair[1]);
});

Without forEach() (IE < 9):

var keys = [];
var values = [];
var pairs = str.split(', ');
for (var i = 0, n = pairs.length; i < n; i++) {
 var pair = pairs[i].split(':');
 keys.push(pair[0]);
 values.push(pair[1]);
};
answered Nov 27, 2013 at 15:03
Sign up to request clarification or add additional context in comments.

1 Comment

This is a nice implementation but be aware that forEach is only implemented in browsers supporting ECMAScript5 so you will need a shim for IE8 and earlier, which is still a large proportion of internet users.
4

This will give you the keys and values arrays

var keys = str.match(/\w+(?=:)/g),
 values = str.match(/[\d.]+(?=,|$)/g);

RegExp visuals

/\w+(?=:)/g

/\w+(?=:)/g

/[\d.]+(?=,|$)/g

/[\d.]+(?=,|$)/g


And another solution without using regexp

var pairs = str.split(" "),
 keys = pairs.map(function(e) { return e.split(":")[0]; }),
 values = pairs.map(function(e) { return e.split(":")[1]; });
answered Nov 27, 2013 at 15:02

Comments

1

JSFiddle

var str = "W1:0.687268668116, URML:0.126432054521, MH:0.125022031608, W2:0.017801539275, S3:0.00869514129605, PC1:0.00616885024382, S5L:0.0058163445156, RM1L:0.00540508783268, C2L:0.00534633687797, S4L:0.00475882733094, S2L:0.00346630632748";
var all = str.split(","),
 arrayOne = [],
 arrayTwo = [];
for (var i = 0; i < all.length; i++) {
 arrayOne.push(all[i].split(':')[0]); 
 arrayTwo.push(all[i].split(':')[1]);
}
answered Nov 27, 2013 at 15:09

Comments

0

parse the string to an array

var str = "W1:0.687268668116, URML:0.126432054521, MH:0.125022031608, W2:0.017801539275";
var tokens = str.split(",");
var values = tokens.map(function (d) {
 var i = d.indexOf(":");
 return +d.substr(i + 1);
});
var keys = tokens.map(function (d) {
 var i = d.indexOf(":");
 return d.substr(0, i);
});
console.log(values);
console.log(keys);

http://jsfiddle.net/mjTWX/1/ here is the demo

answered Nov 27, 2013 at 15:06

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.