Shazboticus S Shazbot Shazboticus S Shazbot - 1 month ago 6
Javascript Question

Javascript table string to array

I have a string that looks like:

<tr><td>Date</td><td>Value</td></tr>
<tr><td>2013-01-01</td><td>231.198</td></tr>
<tr><td>2013-02-01</td><td>232.770</td></tr>
<tr><td>2013-03-01</td><td>232.340</td></tr>
<tr><td>2013-04-01</td><td>231.485</td></tr>
<tr><td>2013-05-01</td><td>231.831</td></tr>
<tr><td>2013-06-01</td><td>232.944</td></tr>
<tr><td>2013-07-01</td><td>233.318</td></tr>


...which is of course essentially a table.

I'd like to dynamically convert this string into an array containing 2 arrays. One of dates, one of values.

[Edited in]
An array of objects with date and values would work too.

Answer

The following::

var input = // your string

var output = $(input).slice(1).map(function(i,el) {
    var tds = $(el).find("td");
    return { "date" : tds.eq(0).text(), "value" : tds.eq(1).text() };
}).get();

...will return an array of objects in this format:

[{"date":"2013-01-01","value":"231.198"}, {"date":"2013-02-01","value":"232.770"}, ... ]

If you'd like each value to be treated as a number you can convert it like so:

    return { "date" : tds.eq(0).text(), "value" : +tds.eq(1).text() };
    // add the unary plus operator ---------------^

Then the result will be:

[{"date":"2013-01-01","value":231.198}, {"date":"2013-02-01","value":232.77}, ... ]
Comments