phuz
phuz

Reputation: 51

Javascript array without quotes

I've been pulling my hair out trying to figure this out. I'm using ZingChart to plot some data from a MySQL query. I put the data into a PHP array, and then use:

var myData = <?php echo json_encode($combined); ?>;

to put it into a javascript array. If I do:

document.write(myData[0]);

then it shows the correct value for that index. When I try to use the array with the ZingChart's JSON, I see that it puts quotes around all the data, which for some reason it doesn't like. If I manually remove the quotes using notepad, the data displays great, so I know it's just a matter of getting rid of these quotes somehow.

Here's how it looks, for example, when I view the source from the page:

var myData = [["1466766034467","71.191"],["1466766094482,71.1986"]];

I've tried many ways and spent many hours trying to get the data passed into JSON without the quotes, but I know just enough to be dangerous, so hopefully someone can guide me.

document.write(myData[1]); 

will result: 1466766094482,71.1986

Thanks in advance.

Upvotes: 1

Views: 1294

Answers (2)

Cam
Cam

Reputation: 931

You can parse the String types into Int and Float. For your 2-item arrays, the following works with the map function:

myData.map(function(x){ return [parseInt(x[0]),parseFloat(x[1]) });

// or in ES6 notation
myData.map( x => [parseInt(x[0]),parseFloat(x[1])] );

General Solution

Inspired by @charlietfl's solution, here's a generic function parseNumeric for converting all numeric data within an array. It will recurse through any nested arrays it finds.

var myData = [["1466766034467","71.191"],["1466766094482","71.1986"]];

// Convert data to numeric, including recursion within nested arrays
// Usage parseNumeric( myData );
function parseNumeric(x,y,z) {
  if( Object.prototype.toString.call( x ) === '[object Array]' ) {
    x.forEach(function(c,i,a){numConvert(c,i,a)});
  } else if ( typeof z != 'undefined' ) {
    z[y] = +x
  }
}

parseNumeric( myData );

// => [[1466766034467,71.191],[1466766094482,71.1986]];

Upvotes: 0

charlietfl
charlietfl

Reputation: 171669

Assuming you are running a reasonably current version of php you can add JSON_NUMERIC_CHECK to json_encode() options argument

json_encode($combined, JSON_NUMERIC_CHECK);

See json_encode docs

Or in javascript iterate arrays and cast values to number using any variety of methods

myData.forEach(function(arr){
    arr[0] = +arr[0];
    arr[1] = +arr[1];
})

Upvotes: 1

Related Questions