I need your help to get data out of a database. I use sql.js and the db.exec delivers an object res:
const res = db.exec('select time_,temp from sensors where topic=\"/xx/sensors\" limit 10')
res looks like this:
Array [ {…} ]
0: Object { columns: (2) […], values: (10) […] }
columns: Array [ "time_", "temp" ]
0: "time_"
1: "temp"
length: 2
values: Array(10) [ (2) […], (2) […], (2) […], … ]
0: Array [ "23:53:01", 19.51 ]
1: Array [ "23:55:01", 19.51 ]
2: Array [ "23:57:01", 19.5 ]
3: Array [ "23:59:01", 19.48 ]
4: Array [ "00:05:04", 19.47 ]
5: Array [ "00:07:04", 19.45 ]
6: Array [ "00:09:04", 19.43 ]
7: Array [ "00:11:04", 19.43 ]
8: Array [ "00:13:04", 19.36 ]
9: Array [ "00:15:04", 19.38 ]
length: 10
res is an object with arrays that has columns. How can I get the time_ to look like this:
const labels = ['00:13:04', '00:15:04', ...];
and the temp in this format:
data = [19.36, 19.38, ...];
Can you please help me? regards
CodePudding user response:
Example, res is as following:
let res = [['1', 1], ['2', 2]]
Then, your required values would be:
let labels = res.map(arr => arr[0]);
let data = res.map(arr => arr[1]);
CodePudding user response:
Your result is an array with a single object in it which in turn has two properties columns
and values
. It looks like you are wanting to map the values
array of this object to two individual arrays by index so you will need to access that property appropriately before mapping:
const res = [{ columns: [], values: [] }];
const values = res[0].values;
// or with destructuring
const [{ values }] = res;
You can then either .map()
over this array twice
const res = [
{
columns: ['time_', 'temp'],
values: [['23:53:01', 19.51], ['23:55:01', 19.51], ['23:57:01', 19.5], ['23:59:01', 19.48], ['00:05:04', 19.47], ['00:07:04', 19.45], ['00:09:04', 19.43], ['00:11:04', 19.43], ['00:13:04', 19.36], ['00:15:04', 19.38],],
},
];
const values = res[0].values;
const labels = values.map((arr) => arr[0]);
const data = values.map((arr) => arr[1]);
console.log('labels: ', labels);
console.log('data: ', data);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
or use a single pass in a for
loop (here using for...of
and destructuring each tuple)
const res = [
{
columns: ['time_', 'temp'],
values: [['23:53:01', 19.51], ['23:55:01', 19.51], ['23:57:01', 19.5], ['23:59:01', 19.48], ['00:05:04', 19.47], ['00:07:04', 19.45], ['00:09:04', 19.43], ['00:11:04', 19.43], ['00:13:04', 19.36], ['00:15:04', 19.38],],
},
];
const labels = [];
const data = [];
for (const [label, datum] of res[0].values) {
labels.push(label);
data.push(datum);
}
console.log('labels: ', labels);
console.log('data: ', data);
<iframe name="sif2" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>